JAVA死锁代码实例
来源:互联网 发布:十四阿哥和四阿哥知乎 编辑:程序博客网 时间:2024/05/19 02:20
所谓死锁,很多人知道就是两个现成互相等待对方占有的资源,而出现无限等待下去的情况,但是涉及到写代码的话不一定都能写出来,以下思路作为参考:
运行结果如下:
(1)创建两个线程,分别持有两个lock,比如是lock1和lock2
(2)线程1和线程2在run方法里分别先获取lock1和lock2的锁,之后分别sleep一段时间(避免一上来一个线程就获得了两个锁),然后线程1和线程2分别尝试去获取lock2和lock1
(3)此时因为锁已经被对方占有,并且对方还在等待自己持有的锁,这个时候死锁就发生了,代码如下:
import java.util.concurrent.locks.ReentrantLock;/** * Created by guishengran on 2017/8/18. */class Task1 implements Runnable{ private ReentrantLock lock1; private ReentrantLock lock2; public Task1(ReentrantLock lock1,ReentrantLock lock2){ this.lock1 = lock1; this.lock2 = lock2; } @Override public void run() { lock1.lock(); try{ System.out.println("Task1 get lock1,start sleep..."); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } lock2.lock(); System.out.println("task1:You can never see me...because we are waiting each other T_T "); }finally { lock2.unlock(); lock1.unlock(); } }}class Task2 implements Runnable{ private ReentrantLock lock1; private ReentrantLock lock2; public Task2(ReentrantLock lock1,ReentrantLock lock2){ this.lock1 = lock1; this.lock2 = lock2; } @Override public void run() { lock2.lock(); try{ System.out.println("Task2 get lock2,start sleep..."); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } lock1.lock(); System.out.println("task2:You can never see me...because we are waiting each other T_T "); }finally { lock1.unlock(); lock2.unlock(); } }}public class DeadLockTest { private static ReentrantLock lock1 = new ReentrantLock(); private static ReentrantLock lock2 = new ReentrantLock(); public static void main(String[] args){// DeadLockTest testObj = new DeadLockTest(); Thread task1 = new Thread(new Task1(lock1,lock2)); Thread task2 = new Thread(new Task2(lock1,lock2)); task1.start(); task2.start(); }}
运行结果如下:
Task1 get lock1,start sleep...Task2 get lock2,start sleep...Process finished with exit code 1
阅读全文
0 0
- Java死锁实例代码
- JAVA死锁代码实例
- 多线程死锁代码实例
- java线程 死锁实例
- java readwritelock 死锁 实例
- Java多线程死锁实例
- java死锁实例
- java线程死锁实例
- Java死锁实例
- JAVA 死锁实例
- 产生死锁代码 - Java
- java死锁代码示例
- java 线程死锁代码
- java编写死锁代码
- java死锁代码
- Java代码 死锁
- Java死锁代码示例
- Java 死锁的简单实例
- 剑指offer:数组中只出现一次的数字
- 重装 11G(11.2.0.4) SDO组件
- 解一类A^x=B(mod C)(C是质数)的方程 (BSGS)
- GPRS项目小结
- Java ArrayList
- JAVA死锁代码实例
- setsockopt用法详解
- 解决数据库Can't connect to MySQL server on 'localhost' (10061)的问题
- html的标签
- Java8改进的HashMap和Hashtable实现类
- Java LinkedList
- BackTrack5 学习笔记7 基于Kioptrix虚拟机的攻击实验1
- Java Web开发——Servlet监听器
- Android控件CircleLayout