多线程——(一):暂停、恢复、停止线程较好的方式,sleep/wait/yield区别

本文介绍了Java中不推荐的线程暂停、恢复和停止方法,如suspend(), resume()和stop(),并讨论了它们可能导致的问题。接着,通过对比sleep(), wait()和yield()的区别,提供了线程控制的其他解决方案。文章强调了使用控制变量和正确处理中断信号在实现线程操作中的重要性。" 89741863,5733425,小波变换:从傅里叶到多分辨率分析,"['信号处理', '数学方法', '频域分析', '时域分析', '小波理论']
摘要由CSDN通过智能技术生成

不推荐的

大家都知道:suspend()、resume()、stop()这些方法已经被废弃了。suspend()、resume()如果使用不当,容易造成公共的同步对象资源的独占以及导致数据不同步。用官网的话说:

This method has been deprecated, as it is inherently deadlock-prone. If the target thread holds a lock on the monitor protecting a critical system resource when it is suspended, no thread can access this resource until the target thread is resumed. If the thread that would resume the target thread attempts to lock this monitor prior to calling resume, deadlock results. Such deadlocks typically manifest themselves as “frozen” processes.

以下摘自:http://blog.csdn.net/jianggujin/article/details/50458486

在JDK1.2以前的版本如果要实现线程的暂停、恢复和停止的方法分别是suspend()、resume()、stop()。但是从JDK1.2以后这些方法已经被遗弃,因为它们有可能造成严重的系统错误和异常。
首先suspend()方法不会释放线程所占用的资源。如果使用该方法将某个线程挂起,则可能会使其他等待资源的线程死锁。而resume()方法本身并无问题,但是不能独立于suspend()方法存在。
其次调用stop()可能会导致严重的系统故障。因为该方法会使线程立刻中断指令执行,不管这段方法是否执行完毕。如果这个线程正在做重要的操作,对程序的运行起着支撑作用,这时如果突然中断其执行则会导致系统崩溃。

其他的方法

暂停:

有必要先学习下sleep()、wait()、yeild()的区别:

sleep()与wait()——

区别:
1.wait()是用于线程间通信的,而sleep()是用于短时间暂停当前线程。
2.wait方法应在同步代码块中调用,但是sleep方法不一定需要。【换句话说就是:wait方法是针对一个被同步代码块加锁的对象,而sleep是针对一个线程。】
3.其中,sleep()方法是属于Thread类中的。而wait()方法是属于Object类中的。
sleep()方法导致了程序暂停执行指定的时间,让出cpu等资源给其他线程,但是并不会释放对象锁,它的监控状态依然保持着,当指定的时间到了又会自动恢复运行状态。sleep是生物钟,自己醒。
4.而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,以便其他正在等待该资源的线程得到该资源进而运行,只有其他线程调用了notify()(或n

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值