死锁举例
2016-06-15 17:20
381 查看
public class DeadLockDemo implements Runnable{
public int flag=1;
static Object o1=new Object();
static Object o2=new Object();
public static void main(String[] args) {
DeadLockDemo d1=new DeadLockDemo();
d1.flag=1;
DeadLockDemo d2=new DeadLockDemo();
d2.flag=2;
Thread t1=new Thread(d1);
Thread t2=new Thread(d2);
t1.start();
t2.start();
}
@Override
public void run() {
if(flag==1){
synchronized (o1) {
System.out.println("o1 "+flag);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(o2){
System.out.println("o2 "+flag);
}
}
}
if(flag==2){
synchronized (o2) {
try {
System.out.println("o2 "+flag);
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(o1){
System.out.println("o1"+flag);
}
}
}
}
}
t1请求02锁,但是02锁被太占用,t1等待,t2请求o1锁,但是o1锁被t1占用,这样t1和t2都在互相等待彼此资源的状态,而且还不释放锁,就这样一直处于等待下去
public int flag=1;
static Object o1=new Object();
static Object o2=new Object();
public static void main(String[] args) {
DeadLockDemo d1=new DeadLockDemo();
d1.flag=1;
DeadLockDemo d2=new DeadLockDemo();
d2.flag=2;
Thread t1=new Thread(d1);
Thread t2=new Thread(d2);
t1.start();
t2.start();
}
@Override
public void run() {
if(flag==1){
synchronized (o1) {
System.out.println("o1 "+flag);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(o2){
System.out.println("o2 "+flag);
}
}
}
if(flag==2){
synchronized (o2) {
try {
System.out.println("o2 "+flag);
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(o1){
System.out.println("o1"+flag);
}
}
}
}
}
t1请求02锁,但是02锁被太占用,t1等待,t2请求o1锁,但是o1锁被t1占用,这样t1和t2都在互相等待彼此资源的状态,而且还不释放锁,就这样一直处于等待下去
相关文章推荐
- 一个坑爹的问题,js注释掉夹杂的el表达式页面不显示(代码颜色坑了我)
- group子句和having子句详解
- java面试基础知识
- 根据远程ip获取位置
- Akka学习笔记:测试Actors
- Android 缩放图片的几种方式说明
- Redis基础教程第7节 - Set
- android shape的使用
- ubuntu下配置环境变量
- 经典再现 基于JAVA平台开发坦克大战游戏
- 【转】Windows搭建Eclipse+JDK+SDK的Android
- 轻松了解JS中this的指向
- Shell脚本eval、``和$()、[[和[、 $(( ))和(())、${}
- 在windows上部署使用Redis
- DNS 地址大全
- Windows下使用AndroidStudio+ReactNative开发Android应用
- Java编程:并发编程的3个特性
- AndroidStudio获取sha1值
- 成绩排序 qsort&&bsearch
- RXjava解决数据管理问题