java程序运行过程中如何暂停,恢复?
1、java控制程序执行,使用的是Thread这个类,可以控制程序暂停或者休眠几秒再执行。
2、可以用以下几种方法:interrupt():中断线程 stop():强迫线程停止执行。用 Thread.stop 来终止线程将释放它已经锁定的所有监视器(作为沿堆栈向上传播的未检查 ThreadDeath 异常的一个自然后果)。
3、设置flag为false则循环结束,这个线程也结束。恢复时需要创建一个新的线程。这是一般的游戏所采用的方法。
4、在Eclipse中,可以通过点击“停止”按钮来临时停止正在运行的Java程序,然后可以通过“运行”按钮再次启动程序。
为啥Java里的Thread类suspend和resume方法会被不赞成使用
1、调用 suspend() 方法挂起线程时,不会释放这个线程拥有的任何一个监视器,因此,如果其他线程试图访问这些监视器,这些监视器会变成死锁。其实,这种机制会导致死锁之间的条件竞争,而且 resume() 会导致这几个方法不能使用。
2、源,除非被挂起的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同 时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应 在自己的Thread 类中置入一个标志,指出线程应该活动还是挂起。
3、如果目标线程等待很长时间(例如基于一个条件变量),则应使用 interrupt 方法来中断该等待。有关更多信息,请参阅《为何不赞成使用 Thread.stop、Thread.suspend 和 Thread.resume?》。强迫线程停止执行。
4、典型地,suspend() 和 resume() 被用在等待另一个线程产生的结果的情形:测试发现结果还没有产生后,让线程阻塞,另一个线程产生了结果后,调用 resume() 使其恢复。
5、suspend()和resume()必须要成对出现,否则非常容易发生死锁。
6、suspend()该方法在jdk6中已经不推荐使用了,过时了。如果是非阻塞线程只加①句,“使用一个共享变量,线程周期性检测这一变量的值”。如果线程被阻塞,它便不能核查共享变量,也就不能停止。
我爱学Java之Thread中stop,suspend,resume为什么不安全
如若不违背并发安全的要求,几乎不可能正确使用 Thread.stop(),因为 stop() 方法会立即“杀死”线程,不会给线程任何机会把对象恢复成合法状态。这和并发安全等原则完全相悖,因此绝对不能使用 stop() 方法。
suspend()方法已经是过期作废的方法,之所以不推荐使用,是因为不好控制,比如:当一个同步线程调用 suspend()方法时,cpu资源被释放,但是当前线程持有的锁不会释放,这就很容易导致程序卡死,无法执行。
有关更多信息,请参阅《为何不赞成使用 Thread.stop、Thread.suspend 和 Thread.resume?》。强迫线程停止执行。如果安装了安全管理器,则以 this 作为其参数调用 checkAccess 方法。
初看起来它们与 suspend() 和 resume() 方法对没有什么分别,但是事实上它们是截然不同的。区别的核心在于,前面叙述的所有方法,阻塞时都不会释放占用的锁(如果占用了的话),而这一对方法则相反。
终止线程的三种方法 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。使用interrupt方法中断线程。
如何正确结束Java线程
1、使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。 使用interrupt方法中断线程。
2、如下:第1个线程创建第2个线程创建第3个线程创建—第2个线程终止第1个线程终止第3个线程终止使用interrupt()中断的方式,注意使用interrupt()方法中断正在运行中的线程只会修改中断状态位,可以通过isInterrupted()判断。
3、通过调用interrupt方法可以使得处于阻塞状态的线程抛出一个异常,即interrupt方法可以用来中断一个正处于阻塞状态的线程;另外,改方法还会设置线程的中断状态(注:isInterrupted()可以用来查询中断状态)。
4、调用线程的stop方法,即可结束一条线程,但是API上说这个方法已经过时 以下为中文API的原话:该方法具有固有的不安全性。
JAVA多线程suspend,resume和wait,notify的区别
suspend() 和 resume() 方法:。挂起和唤醒线程,suspend()使线程进入阻塞状态,只有对应的resume()被调用的时候,线程才会进入可执行状态。
但suspend()方法很容易引起死锁问题,已经不推荐使用了。
notify()是java所有对象都具有的方法,继承子object类并且为final,不能重载。
这些操作包括启动(start)、终止(stop)、睡眠(sleep)、挂起(suspend)、恢复(resume)、等待(wait)和通知(notify)。每一个操作都对应了一个方法 这些方法是由软件包Java.lang提供的。
在java中线程一共有6种状态。分别为:sleep不会释放锁(CPU时间片),在存在锁的情况下,线程会一直占有锁,其他线程无法获取。wait会释放锁,允许其他线程进入同步方法。在调用notify唤醒后会重新去获取锁。
多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度,同步等问题,将在以后探讨。
java多线程为什么弃用stop和suspend
反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处 于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出 真正的问题所在。suspend()方法容易发生死锁。
反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。
使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。 使用interrupt方法中断线程。