有时,线程的挂起是很有用的。例如,一个独立的线程可以用来显示当日的时间。如果用户不希望用时钟,线程被挂起。先于java2的版本,程序用Thread定义的suspend()和resume()来暂停和再启动线程。
java2中挂起、恢复和终止线程。thread定义的suspend(),resume()和stop()方法看起来是管理线程的完美的和方便的方法,它们不能用于新java版本的程序。thread()方法有时会造成严重的系统故障。假定对关键的数据结构的一个线程被锁定的情况,如果该线程在哪里挂起,这些锁定的线程并没有放弃对资源的控制。其他的等待这些资源的线程可能死锁。 而resume不能离开suspend()方法而独立使用。 同样stop()方法可能导致严重的系统故障。设想一个线程正在写一个精密的重要的数据结构仅能完成一个零头。如果该线程在此终止,则数据结构可能会停留在崩溃状态。
在java2中线程必须被设计以使run()方法定期检查以来判定线程是否应该被挂起,恢复或终止它自己的执行。有代表性的,这由建立一个指示线程状态的标志变量来完成。只要该标志设为“running”,run()方法必须继续让线程执行。如果标志为“suspend”,线程必须暂停。若为“stop”,线程必须终止。编写这样的代码有很多方法,单中心主题对多有的程序应该是相同的。
线程间通信:多线程通过把任务分成离散的合乎逻辑的单元代替了事件循环程序。线程还有第二优点:它远离轮询。轮询通常由重复检测条件的循环实现。一旦条件成立,就要采取适当的行动。这浪费了CPU时间。举例来说,当一个线程正在产生数据而另一个程序正在消费它。假设数据产生器必须等待消费者完成工作才能产生新的数据。在轮询系统,消费者在等待生产者产生数据时会浪费很多CPU周期。一旦生产者完成工作,它将启动轮询,浪费更多的CPU时间等待消费者的工作结束,如此下去。
为避免轮询,java包含了通过wait(),notify()和notifyAll()方法实现的一个进程间通信机制。这些方法在对象中是用final方法实现的,所以所有的类都含有它们。这三个方法仅在synchronized方法中才能被调用。尽管这些方法从计算机科学远景方向上来说具有概念的高度先进性,实际很简单:
【】wait()告知被调用的线程放弃管程进入睡眠直到其他线程进入相同管程并且调用notify()。
【】notify()恢复相同对象中第一个调用wait()的线程。
【】notifyAll()恢复相同对象中所有调用wait()的线程。具有高优先级的线程最先运行。
这些方法在Object中被声明如下:
final void wait() throws InterruptedException
final void notify()
final void notifyAll()
转自:http://hi.baidu.com/may_62/item/9d58778e5d3f80de5f0ec127
分享到:
相关推荐
JAVA100例之实例66 实现对线程的控制,中断、挂起、恢复、停止
Java的多线程-线程间的通信.doc
1.线程同步 2.线程间通信 3.线程挂起、恢复和终止 demo演示
java中 使用interrput 如何终止一个线程
Java 线程通信示例 源代码 多线程之间通信,值得收藏
主要介绍了详解Java编程中线程的挂起、恢复和终止的方法,线程是Java学习中的重点和难点知识,需要的朋友可以参考下
Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 ...9.8 挂起、恢复和终止线程 9.9 计时器线程Timer 9.10 线程联合 9.11 守护线程
使用wait()和notify()实现的生产者与消费者模型,可以了解如何使用wait()和notify()进行线程间通信。(上一次上传的代码有一个问题没有考虑到,这次修补了——CSDN没法撤销资源,只能再上传了)
一张图方便理解和掌握java 多线程之间通信的实质 java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,...
Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet
彻底明白Java的多线程-线程间的通信.doc
Java线程:线程的调度-终止线程 25 Java线程:线程的调度-守护线程 28 Java线程:线程组 30 Java线程:线程的同步 33 一、 同步方法 35 二、 同步块 36 三、 volatile关键字 38 四、 使用synchronized关键字要注意...
Java线程Java线程Java线程Java线程Java线程Java线程
Java多线程--线程间的通信
java tcp socket 多线程多句通信
Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解
java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题
Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程
Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程
主要介绍了Java 并发编程之线程挂起、恢复与终止的相关资料,需要的朋友可以参考下