java线程停止的几种方法,哪种情况可以终止当前线程
00-1010具体分析线程结束的三个原因:1。推出带有标志位的线程;2.用stop方法强制终止线程;3.用中断终止线程。什么条件可以终止线程?
话题分析
答案c。
答:线程使用sleep()方法将线程挂起一段时间,而不是终止它。
B:创建新线程时,它对前一个线程没有影响。
抛出一个异常,线程终止。
D:不是终止,而是抢占。进程是资源分配的最基本单位。由同一进程创建的不同线程共享这些资源。当一个线程拥有更高的优先级时,它会抢占其他线程的资源,导致其他线程没有资源可用,从而造成拥塞。
00-1010 1.run方法执行完毕,线程正常结束。
2.线程抛出未捕获的异常或错误
3.直接调用线程的Stop方法结束线程(不推荐,容易导致死锁)
00-1010结束线程的三种方法
使用标志位退出线程。
使用stop方法强制终止线程。
使用中断来终止线程
00-1010一般执行完run()方法后,线程会正常结束。但是,有些螺纹通常是伺服螺纹。它们需要运行很长时间,所以用一个变量来控制循环。
定义了退出标志exit。当exit为true时,while循环出去,exit的默认值为false。在定义exit时,使用了一个Java关键字volatile。这个关键字的目的是同步exit,同一时间只有一个线程可以修改EXIT的值。
公共类ThreadSafe扩展线程{ public volatile boolean exit=false;public void run() { while(!退出){//做点什么} } }
00-1010程序可以直接使用thread.stop()强制终止线程,但是stop的方法非常危险,就像突然关闭电脑的电源而不是按照正常程序关机一样,可能会产生意想不到的结果。最主要的不安全感是线程调用后。stop(),创建子线程的线程将抛出ThreadDeatherror错误,并释放子线程持有的所有锁。
00-1010当线程处于两种状态时,用interrpt终止。
(1)线程未被阻塞:
使用isInterrupted()判断线程的中断标志退出循环,然后使用interrupt()方法将中断标志设置为true,这与使用自定义标志控制循环是一样的。
公共类MyThread扩展Thread { @ Override public void run(){ try { for(int I=0;我50万;I){ if(interrupted()){ system . out . println(已经停止);抛出new interrupted exception();//中断异常} system . out . println( I=(I 1));} system . out . println( I under for );} catch(中断异常){system.out.println(在run方法中捕获!);e . printstacktrace();} }}(2)线程阻塞:如果使用了sleep方法、同步锁的wait、receiver wait、socket、accept等方法,则调用线程的interrupt()方法。
公共类ThreadInterrupt扩展线程{ public void run(){ try { sleep(50000);//延迟50秒} catch(中断异常e){ system . out . println(e . getmessage());} }公共静态void main(String[] args)抛出异常{ Thread Thread=new Thread interrupt();thread . start();system . out . println( 50秒内按任意键中断线程!);system . in . read();thread.interrupt()。thread . join();System.out.println(线程已经退出!);}就是这样。这篇关于Java线程可以被终止的条件的文章在这里。有关Java线程终止的更多信息,请搜索以前关于流行IT的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。