java的线程中断
在java中中断线程可以使用interrupt()函数。此函数虽然不能终止线程的运行,但是可以改变线程的状态为true
即:isInterrupted()的值返回为true
注意:当函数调用了已经被阻塞的线程后,被阻塞的线程将会接收到一个InterruptedException异常。即当前线程即可终止。
例如:
package TestThread.ThreadSynchronized;
public class TestWaitAll {
public static void main(String[] args) {
// 创建线程对象
Test1 test1 = new Test1();
// 创建线程
Thread t = new Thread(test1, "线程1");
Thread t1 = new Thread(test1, "线程2");
Thread t2 = new Thread(test1, "线程3");
Thread t3 = new Thread(test1, "线程4");
// 这是唤醒线程
Test2 test2 = new Test2(test1, "唤醒线程");
t.start();
t1.start();
t2.start();
t2.interrupt();// 中断线程
t3.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 启动唤醒线程
test2.start();
}
}
class Test1 implements Runnable {
public void run() {
synchronized (this) {
// 当被阻塞的线程调用了interrupt后将会发生异常
try {
this.wait();
System.out.println(Thread.currentThread().getName() + ":我没有被中断,我可以执行到!");
} catch (InterruptedException e) {
System.out.println(Thread.currentThread().getName() + ":被中断了!");
}
}
}
}
/**
* @author CHAI015 生成唤醒类
*/
class Test2 extends Thread {
/**
* Test1 为唤醒对象 name 为线程名称
*/
private Test1 test1;
String name;
/**
* @param test1唤醒对象
* @param name唤醒名称
*/
public Test2(Test1 test1, String name) {
super(name);
this.name = name;
this.test1 = test1;
}
public void run() {
synchronized (test1) {
test1.notifyAll();// 针对当前对象执行唤醒所有线程的操作
System.out.println(Thread.currentThread().getName() + ":唤醒线程执行成功!");
}
}
}
运行结果为:

java的线程中断的更多相关文章
- Java并发——线程中断学习
1. 使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返 ...
- java之线程中断——interrupt
如下图所示,interrupt()方法并没有成功的中断我们的线程. 为了便于理解,其实可以这样来类比(注意,只是类比,实际情况并不完全是这样):Thread类中有一个boolean的标志域用来表示线程 ...
- java线程中断和终止线程运行
ava中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线程 ...
- Java线程中断的本质深入理解(转)
一.Java中断的现象 首先,看看Thread类里的几个方法: public static boolean interrupted 测试当前线程是否已经中断.线程的中断状态 由该方法清除.换句话说,如 ...
- Java并发之线程中断
前面的几篇文章主要介绍了线程的一些最基本的概念,包括线程的间的冲突及其解决办法,以及线程间的协作机制.本篇主要来学习下Java中对线程中断机制的实现.在我们的程序中经常会有一些不达到目的不会退出的线程 ...
- 《Java并发编程》之线程中断与终止线程运行
Java中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线 ...
- 【Java 语言】Java 多线程 一 ( 线程启动 | 线程中断 )
一. 线程启动 线程启动 : -- 1. 继承 Thread 运行线程 : 重写 Thread 类的 run 方法, 然后执行该线程; -- 2. 实现 Runnable 接口, 并运行线程; -- ...
- 从JDK源码角度看java并发线程的中断
线程的定义给我们提供了并发执行多个任务的方式,大多数情况下我们会让每个任务都自行执行结束,这样能保证事务的一致性,但是有时我们希望在任务执行中取消任务,使线程停止.在java中要让线程安全.快速.可靠 ...
- 一文搞懂 Java 线程中断
在之前的一文<如何"优雅"地终止一个线程>中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程的方法吗?答案是肯定的,它就是我们今天要分 ...
随机推荐
- Linux 文本文件编辑命令
1.cat 查看纯文本文件,内容较少的,cat[选项][文件],显示行号的 -n 2.more 查看纯文本文件,内容较多的,more[选项]文件 3.head 查看纯文本文档的前N行,head -n ...
- Gradle 打多渠道包
使用gradle 打多渠道包记录经验如下图可见,每个渠道是包含debug 和realse版本的.通过打印BASE_URL 发现在渠道和版本中都可以修改BuildConfig的常量,这样一次可以打出多个 ...
- js和jQuery的互相转换
//jQuery => DOM对象 var a=$(“#id”) var b=document.getElementById(“id”) var c=a[0] 或 var c=a.get(0) ...
- sqlserver一些对象的创建
1.db_link 一 如何创建Dblink1)SQLServer 到 SQLServerExec sp_droplinkedsrvlogin PDALink,Null --删除映射(录与链接服务器上 ...
- sql中的常见报错;
1.对于某些写的sql懒得判断的: SELECT * FROM sys_part WHERE part_no =(SELECT part_no FROM dbo.sys_part) --字查询的结果 ...
- 解决laravel使用QQ邮箱发邮件失败
在 laravel 中使用 QQ 发送邮件的时候莫名其妙的出现了如下错误:Connection could not be established with host smtp.exmail.qq.co ...
- cent os安装filebeat
先贴一下官方文档https://www.elastic.co/guide/en/beats/filebeat/6.6/filebeat-installation.html 我本次使用rpm的方式安装, ...
- 软件工程小组讨论设计NABCD
项目名称:失物招领平台 项目工作小组:冰淇淋队 项目简介:目前同学们丢了东西都qq空间转发或者某个特定的qq群发消息,qq空间转发浪费了别人的时间,qq群发消息也浪费了别人的时间.怎么样才能浪费最少的 ...
- vue 自定义组件使用v-model(组件通信方式1)
父组件通过v-model传递值给子组件时,会自动传递一个value的prop属性,在子组件中通过this.$emit(‘input’,val)自动修改父组件v-model绑定的值 child: < ...
- C++读取与保持图片
#include<iostream> using namespace std; void main(void) { //保存输入图像文件名和输出图像文件名 ]; ]; //图像数据长度 i ...