java为什么不能用stop_终止线程,不能使用stop方法——JAVA编程实践

线程启动完毕后,在运行时可能需要终止,Java提供的终止方栈内信息,结束该线程,这也就导致了run方法的逻辑不完整,输出法只有一个stop,但是我们不建议使用这个方法,因为它有以下三个语句println代表的是一段逻辑,可能非常重要,比如子线程的主逻问题:辑、资源回收、情景初始化等,但是因为stop线程了,这些就都不在执(1)stop方法是过时的行了,于是就产生了业务逻辑不完整的情况。从Java编码规则来说,已经过时的方法不建议采用。这是极度危险的,因为我们不知道子线程会在什么时候被终(2)stop方法会导致代码逻辑不完整止,stop连基本的逻辑完整性都无法保证。而且此种操作也是非常隐Stop方法是一种“恶意”的中断,一旦执行stop方法,即终止当前蔽的,子线程执行到何处会被关闭很难定位,这为以后的维护带来正在运行的线程,不管线程逻辑是否完整,这是非常危险的。比如下了很多麻烦。面的代码:(3)stop方法会破坏原子逻辑Publicstaticvoidmain(string[]args)throwsException多线程为了解决共享资源抢占的问题,使用了锁概念,避免资{源不同步,但是正因为如此,stop方法会带来更大的麻烦:它会丢弃//子线程所有的锁,导致原子逻辑受损,例如下面的程序:Threadthread=newThread(){ClassMultiTheradimplementsRunnable{@overrideInta=0;Publicvoidrun(){@overrideTry{Publicvoidrun(){//子线程休眠1秒//同步代码块,保证原子操作Thread.sleep(1000);Synchronized“(”){}catch(InterruptedExceptione){//自增//异常处理a++;}try{System.out.println“(此处代码不会执行”);//线程休眠0.1秒}Thread.sleep(100);};}catch(InterruptedExcepttione){//启动线程}Thread.start();//自减//主程序休眠0.1秒a--;Thread.sleep(100);stringtn=Thread.currentThread().getName();//子程序停止system.out.println(tn+“:a=”+a);Thread.stop();}}}这段代码的逻辑是这样的:子程序是一个匿名内部类,它的run}方法在执行时会休眠1秒钟,然后再执行后续的逻辑,而主线程则是MultiThread实现了Runnable接口,具备多线程能力,其中run休眠0.1秒后终止子线程的运行,也就是说,JAVA虚拟机在执行方法中加上了synchronized代码块,表示内部是原子逻辑,它会先自thread.stop()时,子线程还在执行sleep(1000),此时stop方法会清除

增然后再自减,按照synchronized同步代码块的规则来处理,此时无Thread-1:a=1论启动多少个线程,打印出来的结果都应该是a=0,但是如果有一个原本期望synchronized同步代码块中的逻辑都是原子逻辑,不正在执行的线程被stop,就会破坏这种原子逻辑,其代码如下:受外界线程的干扰,但是结果却出现原子逻辑被破坏的情况,这也Publicstaticvoidmain(String[]args){是stop方法被废弃的一个重要原因。MultiThreadt=newMultiThread();既然终止一个

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值