您现在的位置是:主页 > news > 国外网站托管/百度搜索数据查询

国外网站托管/百度搜索数据查询

admin2025/5/25 3:34:15news

简介国外网站托管,百度搜索数据查询,网站别人能打开我打不开,需要网站建设文章目录前言一、线程的Stop()操作二、线程的Interrupt()方法进行中断操作1.stop()方法的缺点2.Interrupt()方法三、使用run标志位进行判断总结前言 在 Java 中,并发机制…

国外网站托管,百度搜索数据查询,网站别人能打开我打不开,需要网站建设文章目录前言一、线程的Stop()操作二、线程的Interrupt()方法进行中断操作1.stop()方法的缺点2.Interrupt()方法三、使用run标志位进行判断总结前言 在 Java 中,并发机制…

文章目录

  • 前言
  • 一、线程的Stop()操作
  • 二、线程的Interrupt()方法进行中断操作
    • 1.stop()方法的缺点
    • 2.Interrupt()方法
  • 三、使用run标志位进行判断
  • 总结


前言

在 Java 中,并发机制非常重要,但并不是所有程序语言都支持线程。在以往的程序中,多以一个任务完成以后再进行下一个任务的模式进行,这样下一个任务的开始必须等待前一个任务的结束。Java 语言提供了并发机制,允许开发人员在程序中执行多个线程,每个线程完成一个功能,并与其他线程并发执行。这种机制被称为多线程。
而在多线程当中,有时我们不得不手动中止一个耗时的多线程,去将CPU的时间块分配给其他线程进行调度使用,本文着重讲解线程的两种中断方式,并针对其中一种提出优化的写法。

一、线程的Stop()操作

第一种方式是调用线程的stop方法,顾名思义就是直接让线程停止下来,这种方法是暴力的直接中断线程的运行

public class ThreadTest06 {public static void main(String[] args) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {for (int i=0;i<10;i++){System.out.println(Thread.currentThread().getName()+"--->"+i);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}});thread.start();try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();};thread.stop();}
}

可以看到在分支线程的run方法中,如果不给予线程干扰,该线程会在10秒内直接从0输出到9;但是在主线程当中,我们在让主线程沉睡5秒后,直接执行分支线程的stop()方法,从而中断分支线程的输出。




可参考输出结果如下:
在这里插入图片描述
分支线程在输出5秒后直接被迫中止

二、线程的Interrupt()方法进行中断操作

1.stop()方法的缺点

stop()方法是可以直接让线程停止运行,但也同样存在致命的缺点,它的直接中断方式,并没有让线程留下存储数据的时间,这也极容易导致线程的数据丢失或不一致性的问题。以下介绍Interrupt()方法

2.Interrupt()方法

Interrupt方法来源是异常处理机制,在上方的Stop()方法中,我们可以看到在异常处理中,有这样一行代码:
catch (InterruptedException e)
当然Interrupt()方法也可针对于线程的睡眠和唤醒进行操作,但本文不做提及,以下是根据Interrupt进行改进后的线程中断方法:

代码如下(示例):

public class ThreadTest07 {public static void main(String[] args) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {for (int i=0;i<10;i++){System.out.println(Thread.currentThread().getName()+"--->"+i);try {Thread.sleep(1000);} catch (InterruptedException e) {System.out.println(Thread.currentThread().getName()+"--->"+"中断");e.printStackTrace();return;}}}});thread.start();try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();};thread.interrupt();}
}

输出结果如下:
在这里插入图片描述

三、使用run标志位进行判断

除了以上提及的方法,还有最简单的方法便是在线程类当中添加标志位run,当标志位run为true时,线程继续执行,反之则进行中断处理。

public class ThreadTest08 {public static void main(String[] args) {MyRunnable4 myRunnable4 = new MyRunnable4();Thread thread = new Thread(myRunnable4);thread.start();//模拟五秒try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}myRunnable4.run=false;}
}
class MyRunnable4 implements Runnable{boolean run=true;@Overridepublic void run() {for (int i=0;i<10;i++){if (run){System.out.println(Thread.currentThread().getName()+"--->"+i);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}else {//终止当前线程,进行数据存储等操作return;}}}
}

此处是增添一个标志位的方法,当标志位为true时,继续执行操作;但当标志位为false时,则进行终止操作,进行数据的存储。

总结

以上介绍了线程的几种中断方式,希望对学习线程操作的小伙伴能够有所帮助。