Java线程在什么情况下可以终止
2022-05-05 07:59:45 来源:易采站长站 作者:
目录
线程结束的三个原因具体分析
1、使用标志位推出线程
2、使用stop方法强制终止线程
3、使用interrupt终止线程
哪些情况可以终止线程的进行

题目解析
答案选C
A:线程使用sleep()方法,使线程挂起一段时间,并不是终止
B: 创建一个新线程时,对之前的线程没有影响
C:抛出一个例外,线程终止
D: 并不是终止,而是抢占,进程是资源分配的最基本单位,同一个进程创建的不同线程共享这些资源,当某一个线程优先级比较高时,它就会抢占其他线程的资源,导致其他线程没有资源可用,会造成阻塞
线程结束的三个原因
1HmlJIU、run方法执行完成,线程正常结束
2、线程抛出一个未捕获的Exception或者Error
3、直接www.easck.com调用该线程的Stop方法结束线程(不建议使用,容易导致死锁)
具体分析
线程结束的三种方法
①使用标志位退出线程
②使用stop方法强制终止线程
③使用interrupt终止线程
1、使用标志位推出线程
一般>
定义了一个退出标志 exit,当 exit 为 true 时,while 循环退出,exit 的默认值为 false.在定义 exit 时,使用了一个 java 关键字 volatile,这个关键字的目的是使 exit 同步,同一时刻只 能由一个线程来修改 exit 的值
public class ThreadSafe extends Thread { public volatile boolean exit = false; public void run() { while (!exit){ //do something } } }2、使用stop方法强制终止线程
程序中可以直接使用>
3、使用interrupt终止线程
当线程处于两种状态时,使用interrpt终止
(1)线程未处于阻塞状态:
使用> public class MyThread extends Thread { @Override public void run() { try { for (int i = 0; i < 500000; i++) { if (interrupted()) { System.out.println("已经是停止状态了"); throw new InterruptedException();//中断异常 } System.out.println("i=" + (i + 1)); } System.out.println("我在for下面"); } catch (InterruptedException e) { System.out.println("进run方法中的catch了!"); e.printStackTrace(); } } }
(2)线程处于阻塞状态:如使用了sleep方法,同步锁的 wait,socket 中的 receiver,accept 等方法时,调用线程的 interrupt()方法
public class ThreadInterrupt extends Thread { public void run() { try { sleep(50000); // 延迟50秒 } catch (InterruptedException e) { System.out.println(e.getMessage()); } } public static void main(String[] args) throws Exception { Thread thread = new ThreadInterrupt(); thread.start(); System.out.println("在50秒之内按任意键中断线程!"); System.in.read(); thread.interrupt(); thread.join(); System.out.println("线程已经退出!"); }到此这篇关于Java线程在什么情况下可以终止的文章就介绍到这了,更多相关Java线程终止内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!













闽公网安备 35020302000061号