Java线程:并发协作-死锁
来源:互联网 发布:通钢事件 知乎 编辑:程序博客网 时间:2024/04/25 08:12
Java线程:并发协作-死锁
线程发生死锁可能性很小,即使看似可能发生死锁的代码,在运行时发生死锁的可能性也是小之又小。
发生死锁的原因一般是两个对象的锁相互等待造成的。
在《Java线程:线程的同步与锁》一文中,简述死锁的概念与简单例子,但是所给的例子是不完整的,这里给出一个完整的例子。
/**
* Java线程:并发协作-死锁
*
* @author Administrator 2009-11-4 22:06:13
*/
public class Test {
public static void main(String[] args) {
DeadlockRisk dead = new DeadlockRisk();
MyThread t1 = new MyThread(dead, 1, 2);
MyThread t2 = new MyThread(dead, 3, 4);
MyThread t3 = new MyThread(dead, 5, 6);
MyThread t4 = new MyThread(dead, 7, 8);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class MyThread extends Thread {
private DeadlockRisk dead;
private int a, b;
MyThread(DeadlockRisk dead, int a, int b) {
this.dead = dead;
this.a = a;
this.b = b;
}
@Override
public void run() {
dead.read();
dead.write(a, b);
}
}
class DeadlockRisk {
private static class Resource {
public int value;
}
private Resource resourceA = new Resource();
private Resource resourceB = new Resource();
public int read() {
synchronized (resourceA) {
System.out.println("read():" + Thread.currentThread().getName() + "获取了resourceA的锁!");
synchronized (resourceB) {
System.out.println("read():" + Thread.currentThread().getName() + "获取了resourceB的锁!");
return resourceB.value + resourceA.value;
}
}
}
public void write(int a, int b) {
synchronized (resourceB) {
System.out.println("write():" + Thread.currentThread().getName() + "获取了resourceA的锁!");
synchronized (resourceA) {
System.out.println("write():" + Thread.currentThread().getName() + "获取了resourceB的锁!");
resourceA.value = a;
resourceB.value = b;
}
}
}
}
* Java线程:并发协作-死锁
*
* @author Administrator 2009-11-4 22:06:13
*/
public class Test {
public static void main(String[] args) {
DeadlockRisk dead = new DeadlockRisk();
MyThread t1 = new MyThread(dead, 1, 2);
MyThread t2 = new MyThread(dead, 3, 4);
MyThread t3 = new MyThread(dead, 5, 6);
MyThread t4 = new MyThread(dead, 7, 8);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
class MyThread extends Thread {
private DeadlockRisk dead;
private int a, b;
MyThread(DeadlockRisk dead, int a, int b) {
this.dead = dead;
this.a = a;
this.b = b;
}
@Override
public void run() {
dead.read();
dead.write(a, b);
}
}
class DeadlockRisk {
private static class Resource {
public int value;
}
private Resource resourceA = new Resource();
private Resource resourceB = new Resource();
public int read() {
synchronized (resourceA) {
System.out.println("read():" + Thread.currentThread().getName() + "获取了resourceA的锁!");
synchronized (resourceB) {
System.out.println("read():" + Thread.currentThread().getName() + "获取了resourceB的锁!");
return resourceB.value + resourceA.value;
}
}
}
public void write(int a, int b) {
synchronized (resourceB) {
System.out.println("write():" + Thread.currentThread().getName() + "获取了resourceA的锁!");
synchronized (resourceA) {
System.out.println("write():" + Thread.currentThread().getName() + "获取了resourceB的锁!");
resourceA.value = a;
resourceB.value = b;
}
}
}
}
下面死锁的情况发生了,真是难得一见啊:
0
上一篇:程序员基础 MySQL数据库开发必备常识
下一篇:矩阵的快速转置
相关热门文章
- 中华优秀传统文化的历史积淀─...
- ASE中事物的隔离级别——基本...
- tomcat性能调优
- 种植牙的五大危害
- 一次经典的网络丢包问题处理,...
- 承接自动化测试培训、外包、实...
- Solaris PowerTOP 1.0 发布
- For STKMonitor
- 项目小体会
- busybox的httpd使用CGI脚本(Bu...
- 怎么样找出BIND中查询并发量多...
- 可有人在实际的openstack生产...
- 如下makefile如何编写
- sqlldr 参数配置
- 讨论一下各位所管理的mysql生...
给主人留下些什么吧!~~
评论热议
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁
- Java线程:并发协作-死锁(图)
- java多线程:并发协作-死锁
- java并发-协作对象之间死锁测试
- java并发 --线程的协作
- java 中print 与printf与println的大致区别
- 数据库开发金典技巧
- 说说final关键字的应用
- 6个有用的MySQL语句
- 程序员基础 MySQL数据库开发必备常识
- Java线程:并发协作-死锁
- 矩阵的快速转置
- 顺序存储
- 顺序存储
- 链式存储
- 链式存储
- 栈的应用
- 迷宫问题
- Exercises 4.2 E2 (a)
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
ph值大于7
尿液ph值5意味着什么呢
pi币
pi
pi股
338pi
24pi
pi值
323pi
pi币下载
pi币app下载
pi币app
pi币挖矿
一个pi币到底多少钱
pi币是什么
pi挖矿
pi币交易所
打pi股作文大全女孩
坯读pi还是pei
www338pi
pi是什么意思
pi什么意思
882pi四虎
pi下载
pi挖矿漏洞一天一千币
pi挖矿app下载
pi币中文版免费下载
pi是什么
pi软件
pi挖矿靠谱吗
pi挖矿app
pi拼音
pi币价格
一个pi币多少钱
pi邀请码
少年pi的奇幻漂流
pi币邀请码
pi币安全圈
丕念pi还是念pei
生pi字
pi拼音怎么读四个声调