java---多线程调度与控制常见方法一览
2016-04-24 19:30
435 查看
★ sleep()方法
Thread类的sleep()方法对当前线程操作,是静态方法。sleep()的参数指定以毫秒为单位的线程休眠时间。除非因为中断而提早恢复执行,否则线程不会在这段时间之前恢复执行。
★ interrupt()方法
一个线程可以调用另外一个线程的interrupt()方法,这将向暂停的线程发出一个InterruptedException。变相起到唤醒暂停线程的功能。Thread类的方法interrupt(),是一种强制唤醒的技术。
★ yield()方法
用来使具有相同优先级的线程获得执行的机会。如果具有相同优先级的其它线程是可运行的,yield()将把线程放到可运行池中并使另一个线程运行。如果没有相同优先级的可运行线程,则什么都不做。
注意,执行一次yield()方法,该线程只是放弃当前这一次机会,然后又会重新和其它线程一起抢占CPU,很可能又比其它线程先抢到
★ join()方法
调用某线程的该方法,将当前线程与该线程“合并”,即等待该线程结束,再恢复当前线程的运行。它可以实现线程合并的功能,经常用于线程的绝对调度。
★ wait()方法
当前线程进入对象的wait pool。
★notify()/notifyAll()方法
唤醒对象的wait pool中的一个/所有等待线程。
★suspend()、resume()和stop()这几个方法现在已经不提倡使用。
相关概念:
★创建线程和启动线程并不相同
在一个线程对新线程的Thread对象调用start()方法之前,这个线程并没有真正开始执行。Thread对象在其线程真正启动之前就已经存在了,而且其线程退出之后仍然存在。因此,仍可以控制或获取关于已创建的线程的信息,即使线程还没有启动或已经完成了。
★结束线程
线程会以以下三种方式之一结束:
1)线程到达其run()方法的末尾,推荐这种方法,自然结束。
2)线程抛出一个未捕获到的Exception或Error。
3)另一个线程调用一个弃用的stop()方法。
★守护程序线程(简称守护线程)
我们提到过当Java程序的所有线程都完成时,该程序就退出,但这并不完全正确,因为程序中还隐藏的系统线程。
随着程序的启动而启动,在运行期间一直捕捉符合它条件的处理,这样的线程就是守护线程。
Thread类的sleep()方法对当前线程操作,是静态方法。sleep()的参数指定以毫秒为单位的线程休眠时间。除非因为中断而提早恢复执行,否则线程不会在这段时间之前恢复执行。
★ interrupt()方法
一个线程可以调用另外一个线程的interrupt()方法,这将向暂停的线程发出一个InterruptedException。变相起到唤醒暂停线程的功能。Thread类的方法interrupt(),是一种强制唤醒的技术。
★ yield()方法
用来使具有相同优先级的线程获得执行的机会。如果具有相同优先级的其它线程是可运行的,yield()将把线程放到可运行池中并使另一个线程运行。如果没有相同优先级的可运行线程,则什么都不做。
注意,执行一次yield()方法,该线程只是放弃当前这一次机会,然后又会重新和其它线程一起抢占CPU,很可能又比其它线程先抢到
★ join()方法
调用某线程的该方法,将当前线程与该线程“合并”,即等待该线程结束,再恢复当前线程的运行。它可以实现线程合并的功能,经常用于线程的绝对调度。
★ wait()方法
当前线程进入对象的wait pool。
★notify()/notifyAll()方法
唤醒对象的wait pool中的一个/所有等待线程。
★suspend()、resume()和stop()这几个方法现在已经不提倡使用。
相关概念:
★创建线程和启动线程并不相同
在一个线程对新线程的Thread对象调用start()方法之前,这个线程并没有真正开始执行。Thread对象在其线程真正启动之前就已经存在了,而且其线程退出之后仍然存在。因此,仍可以控制或获取关于已创建的线程的信息,即使线程还没有启动或已经完成了。
★结束线程
线程会以以下三种方式之一结束:
1)线程到达其run()方法的末尾,推荐这种方法,自然结束。
2)线程抛出一个未捕获到的Exception或Error。
3)另一个线程调用一个弃用的stop()方法。
★守护程序线程(简称守护线程)
我们提到过当Java程序的所有线程都完成时,该程序就退出,但这并不完全正确,因为程序中还隐藏的系统线程。
随着程序的启动而启动,在运行期间一直捕捉符合它条件的处理,这样的线程就是守护线程。
相关文章推荐
- java实现快速排序
- 20145107 《Java程序设计》第三次实验报告
- 转载 Eclipse下的SSH开发例子
- spring+activemq+maven集成
- java多态的个人总结
- 20145213《Java程序设计》第八周学习笔记
- 安装elasticsearch及中文分词器、客户端连接示例
- Eclipse中出现一个类文件没有写,项目不一致的问题
- Spring框架核心
- Struts数据回显技术(附加防表单重复提交)
- Struts2标签之<s:iterator/>标签详解
- springMVC框架中多个配置文件使用PropertyPlaceholderConfigurer读取配置properties文件
- javaweb学习总结(二十九)——EL表达式
- SpringMVC一:环境搭建
- 我对Java Serializable(序列化)的理解和总结
- Ubantu install jdk
- 利用Java heap dump查找、分析问题
- Struts2中的类型转换器学习(升级版)
- Spring中@Autowired注解、@Resource注解的区别
- ubuntu安装jdk