永发信息网

为什么 Thread.stop和Thread.suspend等被废弃了?

答案:1  悬赏:10  手机版
解决时间 2021-08-19 23:40
为什么 Thread.stop和Thread.suspend等被废弃了?
最佳答案

停止一个线程会导致其解锁其上被锁定的所有监视器(监视器以在栈顶产生ThreadDeath异常的方式被解锁).如果之前被这些监视器保护的任何对象处于不一致状态,其它线程看到的这些对象就会处于不一致状态.这种对象被称为受损的 (damaged).当线程在受损的对象上进行操作时,会导致任意行为.这种行为可能微妙且难以检测,也可能会比较明显.不像其他未受检的(unchecked)异常, ThreadDeath 悄无声息的杀死及其他线程.因此,用户得不到程序可能会崩溃的警告.崩溃会在真正破坏发生后的任意时刻显现,甚至在数小时或数天之后线程可以在几乎任何地方抛出 ThreadDeath 异常.由于这一点,所有的同步方法和(代码)块将必须被考虑得事无巨细.线程在清理第一个 ThreadDeath 异常的时候(在 catch 或 finally 语句中),可能会抛出第二个.清理工作将不得不重复直到到其成功.保障这一点的代码将会很复杂.那怎么来终止一个线程呢,例如,假设你的 applet 包含了 start 、 stop 和 run 方法: private Thread blinker; public void start() { blinker = new Thread(this); blinker.start(); } public void stop() { blinker.stop(); // 容易产品死锁 } public void run() { Thread thisThread = Thread.currentThread(); while (true) { try { thisThread.sleep(interval); } catch (InterruptedException e){ } repaint(); } }为了避免使用 Thread.stop ,你可以把applet的stop和run方法替换成:rivate volatile Thread blinker; public void stop() { blinker = null; } public void run() { Thread thisThread = Thread.currentThread(); while (blinker == thisThread) { try { thisThread.sleep(interval); } catch (InterruptedException e){ } repaint(); } }为什么 Thread.suspend 和Thread.resume 被废弃了?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
暗黑2为什么按照符文公式合不出来
励志的课外谚语,有关励志的谚语
今年考上了一所破大学(海南师范大学),感觉
男生头发自来卷可以做软化吗?做出来效果如何
绣的眉毛几天可以碰水,雾眉几天可以沾水
photoshop哪个版本比较好
延津县新乡无限极地址在哪里啊
手腕关节疼痛怎么缓解,手腕关节痛是怎么回事
怎样写《岁月神偷》观后感?
生命是以心跳来衡量的吗?
张一山微博名言,张一山火了宋丹丹微博沦陷有
为什么我的体温夏天依然那么烫?
日本国立大学大学好还是私立大学好?价格情况
导热油比热,导热油流速与温度成正比吗?
怎么制作游戏,怎样制作橙光游戏开始的小动画
推荐资讯
三、 C语言的基本结构有哪三种
跳闸的原因?
资治通鉴写的是什么时期的事?
为什么QQ空间的 摩天大楼打不开啊?
现在要打好什么基础,长大之后会很有钱?
在太原哪里还可以买到诺基亚N81(8GB)?告诉
卫东区平顶山市广播电视台无线数字电视服务大
怎样讨个老婆啊?
QQ炫舞情侣名字 男生有殇字 女生有甜或恋字
Q宠大乐斗收人帮派?
我老婆农历7月15日|来的月经 什么时候做容易
为什么盛行风西南风在北半球?而盛行风西北风
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?