gpt4 book ai didi

Java多线程编程安全退出线程方法介绍

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Java多线程编程安全退出线程方法介绍由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

线程停止 。

Thread提供了一个stop()方法,但是stop()方法是一个被废弃的方法。为什么stop()方法被废弃而不被使用呢?原因是stop()方法太过于暴力,会强行把执行一半的线程终止。这样会就不会保证线程的资源正确释放,通常是没有给与线程完成资源释放工作的机会,因此会导致程序工作在不确定的状态下 。

那我们该使用什么来停止线程呢 。

Thread.interrupt(),我们可以用他来停止线程,他是安全的,可是使用他的时候并不会真的停止了线程,只是会给线程打上了一个记号,至于这个记号有什么用呢我们可以这样来用.

java" id="highlighter_916699">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Mythread extends Thread{
  public void run(){
   super .run();
   for ( int i = 0 ;i< 50000 ;i++){
    if ( this .interrupted()){
     System.out.println( "停止" );
     break ;
    }
   }
   System.out.println( "i=" +(i+ 1 ));
  }
}
public class Run{
  try {
   MyThread thread = new MyThread();
   thread.start();
   thread.sleep( 1000 );
   thread.interrupt(); //打上标记
  } catch (Exception e){
   System.out.println( "main" );
   e.printStackTrace();
  }
  System.out.println( "end!" )
}

虽然这样就会停止下来 ,可是For后面的语句还是会执行.

异常法 退出线程 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Mythread extends Thread{
  public void run(){
   super .run();
   try {
    for ( int i = 0 ;i< 50000 ;i++){
     if ( this .interrupted()){
      System.out.println( "停止" );
      throw new Exception();
     }
    }
    System.out.println( "i=" +(i+ 1 ));
   } catch (Exception e){
    System.out.println( "抛出异常了" );
    e.printStackTrace();
   }
  }
}

解释 如果当我们打上了一个标记我们就可以检测到已经打上的时候就返回个true,进入if里面返回了一个异常 这样就终止了。这样做使的线程可以在我们可控的范围里停止 。

用什么方法去看什么状态呢 。

this.interrupted():看看当前线程是否是中断状态,执行后讲状态表示改为false this.isInterrupeted():看看线程对象是否已经是中断状态,但是不清除中断状态标记.

总结 。

以上就是本文关于Java多线程编程安全退出线程方法介绍的全部内容,希望对大家有所帮助。有什么问题可以随时留言,小编会及时回复大家的.希望对大家有所帮助! 。

原文链接:https://www.2cto.com/kf/201710/691692.html 。

最后此篇关于Java多线程编程安全退出线程方法介绍的文章就讲到这里了,如果你想了解更多关于Java多线程编程安全退出线程方法介绍的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com