理论教育 Java程序设计线程休眠

Java程序设计线程休眠

时间:2023-10-18 理论教育 版权反馈
【摘要】:另外,线程休眠过程中不会丢失同步锁的所有权。演示主线程和自定义线程交替执行。图12.11程序运行结果由上面运行结果可以看出,Main中的线程在运行过程中,每输出一次i就会休眠500毫秒,然后让出CPU使用权,让MyThread中的线程获得执行机会。当休眠时间结束,线程会重新进入就绪状态,在等待队列中等待CPU使用权,获得使用权之后开始运行。

Java程序设计线程休眠

线程休眠是指人为地将正在执行的线程暂停,将CPU的使用权让给其他线程。

线程休眠使用的方法是Thread类的静态方法sleep(long millis),该方法能够使当前正在执行的线程暂停(暂时停止执行)指定的毫秒数,设置的时间会受到系统定时器和调度程序的精度和准确性的影响。另外,线程休眠过程中不会丢失同步锁的所有权。sleep()方法的语法如下:

需要说明的是,参数millis表示休眠的时间,单位是毫秒。如果设置的时间为负数,该方法将抛出IllegalArgumentException异常;如果有其他线程将当前线程的中断标志位设置为true,该方法会抛出InterruptedException异常。因此在调用该方法的时候,需要进行异常捕获,将sleep()放在try/catch块中。

【例12.4】演示主线程和自定义线程交替执行。

在Chapter12项目的src目录下新建一个名为cn.pzhu.op的包,然后在这个包下面创建一个名为ThreadSleep的类,关键代码如下:

程序运行结果如图12.11所示。(www.daowen.com)

图12.11 程序运行结果

由上面运行结果可以看出,Main中的线程在运行过程中,每输出一次i就会休眠500毫秒,然后让出CPU使用权,让MyThread中的线程获得执行机会。同理,MyThread中的线程在运行过程中,每输出一次i就会休眠1000毫秒,然后让出CPU使用权。因此,在运行结果中,能够发现Main中的线程会先执行完毕。

另外,代码中使用的Thread.currentThread().getId()方法可以获取当前正在运行的线程的ID,这个ID是系统自动生成的一个随机long类型的数字。

说明:

sleep()方法是Thread类的静态方法,只能控制当前正在运行的线程并让其休眠指定时间,而不能控制其他线程休眠。当休眠时间结束,线程会重新进入就绪状态,在等待队列中等待CPU使用权,获得使用权之后开始运行。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈