千家信息网

Java线程终止实例分析

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍了Java线程终止实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java线程终止实例分析文章都会有所收获,下面我们一起来看看吧。题目解析答案选CA
千家信息网最后更新 2025年01月19日Java线程终止实例分析

这篇文章主要介绍了Java线程终止实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java线程终止实例分析文章都会有所收获,下面我们一起来看看吧。

题目解析

答案选C

A:线程使用sleep()方法,使线程挂起一段时间,并不是终止

B: 创建一个新线程时,对之前的线程没有影响

C:抛出一个例外,线程终止

D: 并不是终止,而是抢占,进程是资源分配的最基本单位,同一个进程创建的不同线程共享这些资源,当某一个线程优先级比较高时,它就会抢占其他线程的资源,导致其他线程没有资源可用,会造成阻塞

线程结束的三个原因

1、run方法执行完成,线程正常结束

2、线程抛出一个未捕获的Exception或者Error

3、直接调用该线程的Stop方法结束线程(不建议使用,容易导致死锁)

具体分析

线程结束的三种方法

①使用标志位退出线程

②使用stop方法强制终止线程

③使用interrupt终止线程

1、使用标志位推出线程

一般 run()方法执行完,线程就会正常结束,然而,常常有些线程是伺服线程。它们需要长时间的运行,就要使用一个变量控制循环

定义了一个退出标志 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方法强制终止线程

程序中可以直接使用 thread.stop()来强行终止线程,但是 stop 方法是很危险的,就象突然关 闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果,不安全主要是: thread.stop()调用之后,创建子线程的线程就会抛出ThreadDeatherror 的错误,并且会释放子 线程所持有的所有锁。

3、使用interrupt终止线程

当线程处于两种状态时,使用interrpt终止

(1)线程未处于阻塞状态:

使用 isInterrupted()判断线程的中断标志来退出循环,再使用 interrupt()方法时,中断标志就会置 true,和使用自定义的标志来控制循环是一样的

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线程终止实例分析"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

0