/**
* 死锁举例
* @author lenovo
*
*/
public class DeadlockTest { private static Object obj1 = new Object();
private static Object obj2 = new Object();
public static void main(String[] args) {
new DeadlockTest().deadLock();
} private void deadLock(){ new Thread(new Runnable(){
@Override
public void run() {
synchronized(obj1){
try {
Thread.sleep(5000);
System.out.println("obj1 locking");
} catch (InterruptedException e) {} synchronized(obj2){
System.out.println("bbb");
}
}
}
}).start(); new Thread(new Runnable(){
@Override
public void run() {
synchronized(obj2){
try {
Thread.sleep(5000);
System.out.println("obj2 locking");
} catch (InterruptedException e) {} synchronized(obj1){
System.out.println("aaa");
}
}
}
}).start();
}
}
//来源:网上抄的

死锁例子2

package com.loong.main;
public class ThreadDeadlock { public static void main(String[] args) throws InterruptedException {
Object obj1 = new Object();
Object obj2 = new Object();
Object obj3 = new Object(); Thread t1 = new Thread(new SyncThread(obj1, obj2), "t1");
Thread t2 = new Thread(new SyncThread(obj2, obj3), "t2");
Thread t3 = new Thread(new SyncThread(obj3, obj1), "t3"); t1.start();
Thread.sleep(5000);
t2.start();
Thread.sleep(5000);
t3.start(); } } class SyncThread implements Runnable{
private Object obj1;
private Object obj2; public SyncThread(Object o1, Object o2){
this.obj1=o1;
this.obj2=o2;
}
@Override
public void run() {
String name = Thread.currentThread().getName();
System.out.println(name + " acquiring lock on "+obj1);
synchronized (obj1) {
System.out.println(name + " acquired lock on "+obj1);
work();
System.out.println(name + " acquiring lock on "+obj2);
synchronized (obj2) {
System.out.println(name + " acquired lock on "+obj2);
work();
}
System.out.println(name + " released lock on "+obj2);
}
System.out.println(name + " released lock on "+obj1);
System.out.println(name + " finished execution.");
}
private void work() {
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} t1 acquiring lock on java.lang.Object@3904dd9e
t1 acquired lock on java.lang.Object@3904dd9e
t2 acquiring lock on java.lang.Object@28147a15
t2 acquired lock on java.lang.Object@28147a15
t3 acquiring lock on java.lang.Object@7605d74a
t3 acquired lock on java.lang.Object@7605d74a
t1 acquiring lock on java.lang.Object@28147a15
t2 acquiring lock on java.lang.Object@7605d74a
t3 acquiring lock on java.lang.Object@3904dd9e // 参考:http://www.importnew.com/9668.html

死锁举例3

package com.loong.main;

public class ThreadDeadLock2 {

    private static Object obj1 = new Object();
private static Object obj2 = new Object();
public static void main(String[] args) {
DeadLock2 dl1 =new DeadLock2(obj1,obj2);
DeadLock2 dl2 =new DeadLock2(obj1,obj2);
dl1.flag = 0;
dl2.flag = 1;
new Thread(dl1).start();
new Thread(dl2).start();
}
} class DeadLock2 implements Runnable{
public int flag =0;
private Object ob1;
private Object ob2; public DeadLock2(Object o1,Object o2){
this.ob1 = o1;
this.ob2 = o2;
} @Override
public void run() {
if(flag==0){
synchronized(ob1){
System.out.println("ob1" + "starting");
try {
Thread.sleep(5000);
System.out.println("ob1" + "ending");
} catch (InterruptedException e) {} synchronized(ob2){
System.out.println("ob2");
}
}
}
if(flag==1){
synchronized(ob2){
System.out.println("ob2" + "starting");
try {
Thread.sleep(5000);
System.out.println("ob2" + "ending");
} catch (InterruptedException e) {} synchronized(ob1){
System.out.println("ob1");
}
}
}
}
}
// Java线程多线程编程【尚学堂科技马士兵Java基础教程】

最新文章

  1. 你必须牢记的*.Config-配置文件
  2. JavaWeb学习笔记——表达式语言
  3. mysql性能优化-简易版
  4. .net如何实现时间相减得到天数
  5. ubuntu1404下Apache2.4错误日志error.log路径位置
  6. Trailing Zeroes (III)(lightoj 二分好题)
  7. PMS5003ST+Arduino Nano 串口读取数据
  8. 排序算法Java实现(直接插入排序)
  9. 前端ajax请求百度地图api
  10. mysql5.7 for windows二进制安装及配置
  11. docker 安装 RabbitMQ
  12. PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化
  13. UIView常见方法
  14. 利用BFS实现最短路
  15. P·C·L 了解
  16. 使用SQL语句的子查询批量复制表数据
  17. CSS04--对齐、 布局、导航栏
  18. 【严蔚敏】【数据结构题集(C语言版)】1.17 求k阶斐波那契序列的第m项值的函数算法
  19. Java程序(非web)slf4j整合Log4j2
  20. 修改mysql root的秘密

热门文章

  1. player视频.js
  2. ubuntu 杂记
  3. linux 命令绿色安装
  4. MongoDB入门---数据库&&&集合的基本操作
  5. DevExpress 操作gridcontrol
  6. 北京Uber优步司机奖励政策(2月19日)
  7. Python3 linux安装
  8. DSP5509的定时器实验-第2篇
  9. dva框架之redux相关
  10. 为什么测试人员必须掌握Linux?