Java基础_线程_多线程_死锁
2013-01-08 14:03
127 查看
两个线程都持有某一对象的锁,并试图得到对方持有对象的锁,这就造成了死锁
public class DeadLockTest implements Runnable {
static Object o1 = new Object();
static Object o2 = new Object();
boolean flag = true;
public void run() {
// TODO Auto-generated method stub
if(flag == true) {
synchronized(o1) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(o2) {
System.out.println("flag == true");
}
}
}
if(flag == false) {
synchronized(o2) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (o1) {
System.out.println("flag == false");
}
}
}
}
public static void main(String[] args) {
DeadLockTest t1 = new DeadLockTest();
DeadLockTest t2 = new DeadLockTest();
t1.flag = true;
t2.flag = false;
Thread thread1 = new Thread(t1);
Thread thread2 = new Thread(t2);
thread1.start();
thread2.start();
}
}
public class DeadLockTest implements Runnable {
static Object o1 = new Object();
static Object o2 = new Object();
boolean flag = true;
public void run() {
// TODO Auto-generated method stub
if(flag == true) {
synchronized(o1) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(o2) {
System.out.println("flag == true");
}
}
}
if(flag == false) {
synchronized(o2) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (o1) {
System.out.println("flag == false");
}
}
}
}
public static void main(String[] args) {
DeadLockTest t1 = new DeadLockTest();
DeadLockTest t2 = new DeadLockTest();
t1.flag = true;
t2.flag = false;
Thread thread1 = new Thread(t1);
Thread thread2 = new Thread(t2);
thread1.start();
thread2.start();
}
}
相关文章推荐
- java线程基础巩固---多线程死锁分析,案例介绍
- 黑马程序员-19-java基础-多线程(2)-死锁与线程间通信(synchronized与Lock的区别及各自用法)
- JAVA多线程-生产者与消费者当线程多时发生死锁的解决方法
- Java基础学习5_多线程(线程间通信--等待唤醒机制)
- Java基础学习__多线程(线程间通信--生产者消费者JDK5.0升级版)
- java多线程基础(2)-调度方式之暂停当前线程方式1-阻塞
- java线程基础巩固---多线程与JVM内存结构的关系及Thread构造函数StackSize的理解
- java多线程并发(一)(线程基础)
- 线程的状态及转换(java多线程基础)
- Java多线程:线程死锁
- java 多线程系列基础篇(六)之线程让步
- 黑马程序员——java基础日记——多线程(2)——线程间通信与JDK1.5新特性
- JAVA基础学习(十一)--多线程一线程的创建,运行,同步和锁
- Java基础多线程之线程中止示例:
- Java多线程基础--09之 interrupt()和线程终止方式
- Java多线程编程基础之线程对象
- Java多线程系列--“基础篇”06之 线程让步
- Java基础第十一天学习日记_线程、同步、死锁
- 黑马程序员-JAVA基础-多线程的安全、同步与死锁
- 玩转java多线程学习篇一多线程基础