您的位置:

java线程的暂停与唤醒测试(java线程等待与唤醒)

本文目录一览:

Java里如何暂停一个线程,达到一定条件后又唤醒线程?

thread1{

run() {

synchronized(obj) {

while(条件1不满足)obj.wait();

//下面写满足后的操作

}

}

}

//线程2中将条件1满足,然后唤醒线程1

thread2{

run() {

synchronized(obj) {

//使条件1满足

obj.notifyAll();

}

}

}

obj一定要是对同一个对象的引用

java多线程暂停

由于java废弃了suspend和resume,所以目前来看使用Thread类貌似没有不修改线程的执行体而从外部暂停线程的方法,javadoc里面推荐的方法是在外部通过某种方法把暂停和恢复的要求通知给线程对象,比如用public属性,然后由线程的执行体自己隔一段时间进行一次自主判断,如果需要暂停就用wait或者sleep或者某些其他的方法暂停,而恢复运行的话根据暂停的方法不同有不同的选择,比如用wait暂停可以用notify恢复运行,用sleep则等待时间到,或者可以用interrupt恢复。

而yield的话我觉得可能不能达到目的,首先yield本身也是必须由线程执行体自主执行,而不是线程外部执行的,然后yield照我的理解是让线程暂时离开运行状态但并不阻塞,而是进入就绪状态等待下一次调度,所以并不能保证线程暂停,当然yield本身执行之后因为没有阻塞所以并不需要显式的恢复。

如果你的线程执行体里面是循环的话,好写一些,只要每次循环的时候检测暂停或者恢复的外部要求就行了,不过如果是顺序执行,可能只有每隔一段就插入一次检测了。

当然也可以找找Thread类之外的方法。

JAVA中如何控制线程的启动与暂停

线程的状态表示线程正在进行的活动以及在此时间段内所能完成的任务.线程有创建,可运行,运行中,阻塞,死亡五中状态.一个具有生命的线程,总是处于这五种状态之一:

1.创建状态

使用new运算符创建一个线程后,该线程仅仅是一个空对象,系统没有分配资源,称该线程处于创建状态(new thread)

2.可运行状态

使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需资源,使该线程处于可运行状态(Runnable)

3.运行中状态

Java运行系统通过调度选中一个Runnable的线程,使其占有CPU并转为运行中状态(Running).此时,系统真正执行线程的run()方法.

4.阻塞状态

一个正在运行的线程因某种原因不能继续运行时,进入阻塞状态(Blocked)

5.死亡状态

线程结束后是死亡状态(Dead)

创建线程和启动线程并不相同,在一个线程对新线程的Thread对象调用start()方法之前,这个新线程并没有真正开始执行。Thread对象在其线程真正启动之前就已经存在了,而且其线程退出之后仍然存在。这可以让您控制或获取关于已创建的线程的信息,即使线程还没有启动或已经完成了。

通常在构造器中通过start()启动线程并不是好主意。这样做,会把部分构造的对象暴露给新的线程。如果对象拥有一个线程,那么它应该提供一个启动该线程的start()或init()方法,而不是从构造器中启动它。

结束Java线程

Java线程会以以下三种方式之一结束:

Java线程到达其run()方法的末尾。

Java线程抛出一个未捕获到的Exception或Error。

另一个Java线程调用一个弃用的stop()方法。弃用是指这些方法仍然存在,但是您不应该在新代码中使用它们,并且应该尽量从现有代码中除去它们。

当Java程序中的所有线程都完成时,程序就退出了。

java如何实现线程的启动和暂停

Thread thread = new Thread(obj);

thread.start();//开始

thread .sleep(30000);//暂停

thread.stop();//停止