標籤:線程睡眠
本文是學習網路上的文章時的總結,感謝大家無私的分享。
1、Thread類的sleep方法,可以使線程睡眠。此方法接收一個整數作為參數,表示線程暫停啟動並執行毫秒數。在調用sleep方法後,當時間結束時,JVM會安排他們CPU時間,線程會繼續按指令執行。
另一種可能是使用一個有TimeUnit列舉元素的sleep方法,使用線程類的sleep方法讓當前線程睡眠,但是它接收的參數單位後會轉成毫秒的。
2、當你調用sleep()方法,Thread離開CPU並在一段時間內停止運行。在這段時間內,他是不消耗CPU時間的,使用可以執行其他任務,
但它並不釋放對象鎖。
當Thread是睡眠和中斷的時候,那方法會立刻拋出InterruptedException異常並不會一直等到睡眠時間過去。
3、Java並發API有另一種方法能讓線程對象離開CPU,它是yield()方法,它向JVM表示線程對象可以讓CPU執行其他任務。JVM不保證遵守請求,通常它只是用來調試。只是不能由使用者指定暫停多長時間,並且yield()方法只能讓同優先順序的線程有執行的機會。
package chapter;import java.util.Date;import java.util.concurrent.TimeUnit;/** * * <p> * Description: * </p> * @author zhangjunshuai * @version 1.0 * Create Date: 2014-8-13 下午8:47:30 * Project Name: Java7Thread * * <pre> * Modification History: * Date Author Version Description * ----------------------------------------------------------------------------------------------------------- * LastChange: $Date:: $ $Author: $ $Rev: $ * </pre> * */public class FileClock implements Runnable{@Overridepublic void run() {for (int i = 0; i < 10; i++) {System.out.printf("%s\n", new Date());try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {System.out.printf("The FileClock has been interrupted");}}}}
調用類
package chapter;import java.util.concurrent.TimeUnit;public class Main5 {/** * <p> * </p> * @author zhangjunshuai * @date 2014-8-13 下午6:34:34 * @param args */public static void main(String[] args) {FileClock clock = new FileClock();Thread thread = new Thread(clock);thread.start();try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}thread.interrupt();}}
參考:
並髮網
java之yield(),sleep(),wait()區別詳解-備忘筆記