千家信息网

java中怎么利用lockInterruptibly方法实现并发

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家介绍java中怎么利用lockInterruptibly方法实现并发,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。lockInterruptibly方法是说线程在等
千家信息网最后更新 2026年11月03日java中怎么利用lockInterruptibly方法实现并发

这篇文章给大家介绍java中怎么利用lockInterruptibly方法实现并发,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

lockInterruptibly方法是说线程在等待获取锁的同时还能响应线程interrupt方法的中断请求。换句话说就是存在等待获取锁的同时还不能响应线程interrupt方法的中断请求的情况,synchronized内置锁便是,请看测试代码:

public class LockInterruptTest {

public static void main(String[] args) {
// TODO Auto-generated method stub
Thread t1 = new Thread(){
public void run(){
synchronized (LockInterruptTest.class) {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
t1.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Thread t2 = new Thread(){
public void run(){
synchronized (LockInterruptTest.class) {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
t2.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Thread t3 = new Thread(){
public void run(){
System.out.println("准备中断t2");
t2.interrupt();
System.out.println("中断t2");
}
};
t3.start();
}

}
代码中准备了3个线程,第2个线程尝试获取第1个线程的锁,第3个线程尝试中断第2个线程。代码是能够正常看到"中断t2"的,但是用jconsole工具就能看到第2个线程由于尝试获取锁一直阻塞着:

换成lockInterruptibly后代码如下:

public class LockInterruptTest {
static ReentrantLock lock = new ReentrantLock();

public static void main(String[] args) {
Thread t1 = new Thread() {
public void run() {
try {
lock.lockInterruptibly();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} finally {
lock.unlock();
}
}
};
t1.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
Thread t2 = new Thread() {
public void run() {
try {
lock.lockInterruptibly();
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} catch (InterruptedException e1) {
e1.printStackTrace();
} finally {
lock.unlock();
}
}
};
t2.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
Thread t3 = new Thread() {
public void run() {
System.out.println("准备中断t2");
t2.interrupt();
System.out.println("中断t2");
}
};
t3.start();
}

}

通过jconsole工具可以发现第2个线程被成功中断。

关于java中怎么利用lockInterruptibly方法实现并发就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

线程 方法 代码 准备 尝试 内容 同时 工具 更多 帮助 不错 成功 兴趣 后代 小伙 小伙伴 就是 情况 换句话说 文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技股 互联网医疗科技 深圳互联网络科技有限公司 互联网与未来科技 广州宏创互联网科技 互联网科技的英文 狮子座互联网科技有限公司 时间互联网络科技 国外互联网科技网站 盛创互联网科技有限公司 互联网科技生活的内容 互联网巨头投资的硬核科技 广西拼得多互联网科技有限公司 赶超互联网科技 微信多开 洛阳昕诺飞互联网科技有限公司 上海创道互联网络科技有限公司 广东鹅鹅鹅互联网科技有限公司 上海万顺科技互联网有限公司招聘 科技信息时代互联网发展 互联网的黑科技实验室 腾讯科技 互联网女皇 互联网金融和金融科技 互联网科技实习生岗位职责 赶超互联网科技 微信多开 民营互联网公司国防科技 互联网科技的全部知识 华中科技大学互联网的牛人 互联网第三次科技革命特征 万物互联网智能科技 广州智享互联网科技
0