终止java线程的2种方法
1、使用一个volatile的共享变量
2、使用interrupt方法
import java.util.concurrent.TimeUnit; /**
* ThreadTest
*/
public class ThreadTest implements Runnable { private volatile boolean stop = false; @Override
public void run() {
while (!stop) {
System.out.println(Thread.currentThread().getName() + " is running...");
try {
TimeUnit.MILLISECONDS.sleep(1000);
} catch (InterruptedException e) {
System.out.println("wake up from block");
stop = true;
}
}
System.out.println(Thread.currentThread().getName() + " is exiting...");
} public static void main(String[] args) {
ThreadTest threadTest = new ThreadTest();
Thread t1 = new Thread(threadTest);
t1.start();
try {
TimeUnit.MILLISECONDS.sleep(3000);
} catch (InterruptedException e) {
//
} // 1、使用 volatile共享变量
threadTest.stop = true; // 2、使用interrupt方法
System.out.println("Interrupt thread:" + t1.getName());
t1.interrupt();
try {
TimeUnit.MILLISECONDS.sleep(3000);
} catch (InterruptedException e) {
//
}
System.out.println("Stopping application...");
} }
2种可能的运行结果:
Thread-0 is running...
Thread-0 is running...
Thread-0 is running...
Interrupt thread:Thread-0
Thread-0 is running...
wake up from block
Thread-0 is exiting...
Stopping application...
或
Thread-0 is running...
Thread-0 is running...
Thread-0 is running...
Interrupt thread:Thread-0
Thread-0 is running...
Thread-0 is exiting...
Stopping application...
终止java线程的2种方法的更多相关文章
- (转)Java结束线程的三种方法
背景:面试过程中问到结束线程的方法和线程池shutdown shutdownnow区别以及底层的实现,当时答的并不好. Java结束线程的三种方法 线程属于一次性消耗品,在执行完run()方法之后线程 ...
- Java结束线程的三种方法(爱奇艺面试)
线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的.例如在程序中使用线程进行So ...
- java创建线程的三种方法
这里不会贴代码,只是将创建线程的三种方法做个笼统的介绍,再根据源码添加上自己的分析. 通过三种方法可以创建java线程: 1.继承Thread类. 2.实现Runnable接口. 3.实现Callab ...
- Java新建线程的3种方法
Java新建线程的3种方法 =================== Java创建线程有3种方法:(1)继承Thread;(2)实现Runnable接口:(3)实现Callable接口; 由于Java只 ...
- Java 创建线程的两种方法
Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...
- 《Java多线程面试题》系列-创建线程的三种方法及其区别
1. 创建线程的三种方法及其区别 1.1 继承Thread类 首先,定义Thread类的子类并重写run()方法: package com.zwwhnly.springbootaction.javab ...
- 如何终止java线程
http://blog.csdn.net/anhuidelinger/article/details/11746365 终止线程的三种方法 有三种方法可以使终止线程. 1. 使用退出标志,使线程正常 ...
- 透彻讲解,Java线程的6种状态及切换
Java中线程的状态分为6种. 1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法.2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running) ...
- Java线程的6种状态及切换
Java中线程的状态分为6种. 1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法.2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running) ...
随机推荐
- Enrolment注册插件
自moodle2.0注册插件必须继承 lib/enrollib.php的 enrol_plugin 抽象类:这个基类包含所有标准方法和开发人员文档 课程注册信息存储在enrol和user_enrol ...
- Centos7服务器中安装MySQL(选择一个你想要的版本)
开始,我默认安装了MySQL8,但是在测试的时候发现通过Hibernate连接之前的MySQL5.7的代码运行在连接新版本的库的时候发生异常,出于时间原因没有深度排查 但是我严重怀疑是版本匹配问题,为 ...
- JavaEE 之 Habernate
1.Habernate a.定义:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO(简单java对象,即javabean)与数据库表建立映射关 ...
- Dev-C++安装第三方库boost
Dev-C++安装第三方库boost 转 https://www.jianshu.com/p/111571e4d6f5?utm_source=oschina-app 之前鉴于codeblocks界面 ...
- HDU2255 奔小康赚大钱 (最大权完美匹配) 模板题【KM算法】
<题目链接> 奔小康赚大钱 Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊 ...
- wireshark抓包工具详细说明及操作使用
https://blog.csdn.net/qq78069460/article/details/79153895
- 在Java中,关于.Class()与.getCalss与.getClass().getName()的区别
** * Java反射 *所谓反射,可以理解为在运行时期获取对象类型信息的操作. *传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下, *编程人员可以动态获取这些信息,从而编写更加 ...
- linux 学习笔记 cpio命令
1 文件或目录打包 打包有如下多种情况 A>包含子目录打包 find /usr/lib -print /cpio -o >/uo/temp1.cpio 将/usr/lib目录下的文件与子目 ...
- BZOJ.4888.[TJOI2017]异或和(树状数组)
BZOJ 洛谷 \(Description\) 求所有区间和的异或和. \(n\leq 10^5,\ \sum a_i\leq 10^6\). \(Solution\) 这样的题还是要先考虑按位做. ...
- O(1) long long a*b%p
inline ll muc(ll n,ll m){n%=p,m%=p;return (n*m-(ll)((long double)n*m/p)*p+p)%p;}