这种关闭线程的方法是否安全或者有什么不足

问题描述

这种关闭线程的方法是否安全或者有什么不足?代码如下:package test;public class Test extends Thread{private boolean b = true;/** * 启动线程的方法 */synchronized public void run(){System.out.println("线程启动");while(b){//做一些事}}/** * 关闭线程的方法 */public void close(){b = false;System.out.println("关闭线程");}}

解决方案

这种做法应该没什么问题,我在开源软件源码里也看到过。不过就是要注意一点,在b被设置为false的时候,run方法可能刚好进入while,这样在你close之后,还会多做一次//做一些事
解决方案二:
这种方式我试了一下没法先什么问题,vm server模式下试了也没有什么问题。但是看一下Thread里面的interupt方法都是调用的本地方法,如果这样可以的话sun也不可能费劲去调用本地方法,所以还是不建议这么去实现。
解决方案三:
在server模式下确实是死循环,在client模式下,可能还能关掉。把变量加上volatile就不存在问题了!
解决方案四:
如果没估计错误的话,这样线程永远停止不了。 线程的同步,在run方法里面是拷贝了一份b变量,你在程序的其他的部位设置b并未通知run方法去更新b变量的新值。要正确运行的话 应该close方法也加上同步关键字。 而且Thread类停止并不需要你这么实现 Thread里面自带的线程终止标志 isinterrupted, public void run(){while(!isinterrupted){}}

时间: 2024-12-30 20:23:37

这种关闭线程的方法是否安全或者有什么不足的相关文章

android-Android中如何关闭线程

问题描述 Android中如何关闭线程 我在一个界面是向服务器上传一张图片,在上传图片时,此时还没有上传成功,此时,我跳转到另外一个界面,我想结束掉上传图片这个线程.求解答.谢谢 解决方案 在android中开启的线程用Thread.stop()来关闭是不会真正关闭的,当我们再次start线程的时候,会产生异常:Thread is already started. 针对这个问题可以在线程的run方法里,加一个判断标志.例如: ????????????? class TestThread exte

详解Java编程中线程同步以及定时启动线程的方法_java

使用wait()与notify()实现线程间协作 1. wait()与notify()/notifyAll()调用sleep()和yield()的时候锁并没有被释放,而调用wait()将释放锁.这样另一个任务(线程)可以获得当前对象的锁,从而进入它的synchronized方法中.可以通过notify()/notifyAll(),或者时间到期,从wait()中恢复执行. 只能在同步控制方法或同步块中调用wait().notify()和notifyAll().如果在非同步的方法里调用这些方法,在运

android 关闭线程问题

问题描述 android 关闭线程问题 关闭不了线程,一调用syop()方法就报错. 解决方案 Android线程问题关于Android的线程问题Android Service 线程问题 解决方案二: 不建议用stop方法来强制关闭线程,不安全,就好比你的电脑突然被切断了电源.可考虑控制线程的运行条件来实现:或者尝试interrupt()方法:或者实现Future接口来创建线程. 解决方案三: 你是自学的? stop() 已过时. 该方法具有固有的不安全性.用 Thread.stop 来终止线程

centos中关闭selinux的方法

这两天做LAMP时才发现selinux这么个东西,发个关闭的方法! 关闭SELinux的方法: 修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启. 如果不想重启系统,使用命令setenforce 0 注: setenforce 1 设置SELinux 成为enforcing模式 setenforce 0 设置SELinux 成为permissive模式 在lilo或者grub的启动参数中增加:selinux=0,也可以关闭seli

Thinkphp关闭缓存的方法

  这篇文章主要介绍了Thinkphp关闭缓存的方法,开发项目时经常需要调戏,有缓存的话不太方便,因此总出了关闭缓存的方法,需要的朋友可以参考下 因在开发中需要经常修改,从而要经常删除缓存,才能看到效果. 所以为了开发的方便,可以把缓存给去除. 1.找到ThinkPHPCommonconvention.php和ThinkPHPCommondebug.php 2.打开这两个文件找到你想要的设置即可. debug.php中 代码如下: 'TMPL_CACHE_ON'=>false, // 默认开启模

win7关闭防火墙的方法

win7关闭防火墙的方法和具体步骤如下: 1.依次打开开始--控制面板, 2.点击"Windows防火墙"选项进入, 3.再选择"打开或者关闭windows防火墙"点击进入, 4.选择防火墙关闭,确定.

搜狗浏览器如何重新打开误关闭网页的方法

重新打开误关闭网页的方法:单击地址栏左侧的撤销按钮,即可打开最近关闭的网页.单击撤销按钮旁边的下拉箭头即可打开网页 撤销列表,撤销列表中包含了最近关闭的20个网页,如下图所示.

js操作css属性实现div层展开关闭效果的方法

  本文实例讲述了js操作css属性实现div层展开关闭效果的方法.分享给大家供大家参考.具体分析如下: 最近学javascript接触到js对css属性操作,就写了个展开关闭效果,同时实现了按钮文字切换,很简洁啊!这段Js对象操作css属性实现div层的展开关闭效果.将代码分享给JS前端设计者. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <title>js操作div展开关闭</ti

JQuery实现展开关闭层的方法

 这篇文章主要介绍了JQuery实现展开关闭层的方法,实例分析了jQuery的slideToggle方法使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了JQuery实现展开关闭层的方法.分享给大家供大家参考.具体实现方法如下:   代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml