死锁实例
2015-08-18 18:31
471 查看
package thread;
public class DeadLockTest implements Runnable {
//发生死锁的对象一定是静态的
public static Object o1=new Object (),o2=new Object();
private int flag=1;
public static void main(String[] args) {
// TODO Auto-generated method stub
DeadLockTest dl1=new DeadLockTest();
DeadLockTest dl2=new DeadLockTest();
dl1.setFlag(1);
dl2.setFlag(2);
Thread t1=new Thread(dl1);
Thread t2=new Thread(dl2);
t1.start();
t2.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("falg="+this.flag);
if(this.flag==1){
//o1和o2都是静态的成员,不管实例化多少个对象,一个静态的成员都只有一个
synchronized(o1){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(o2){
System.out.println("1");
}
}
}
if(this.flag==2){
synchronized(o2){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (o1) {
System.out.println("2");
}
}
}
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
}
public class DeadLockTest implements Runnable {
//发生死锁的对象一定是静态的
public static Object o1=new Object (),o2=new Object();
private int flag=1;
public static void main(String[] args) {
// TODO Auto-generated method stub
DeadLockTest dl1=new DeadLockTest();
DeadLockTest dl2=new DeadLockTest();
dl1.setFlag(1);
dl2.setFlag(2);
Thread t1=new Thread(dl1);
Thread t2=new Thread(dl2);
t1.start();
t2.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("falg="+this.flag);
if(this.flag==1){
//o1和o2都是静态的成员,不管实例化多少个对象,一个静态的成员都只有一个
synchronized(o1){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(o2){
System.out.println("1");
}
}
}
if(this.flag==2){
synchronized(o2){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (o1) {
System.out.println("2");
}
}
}
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
}
相关文章推荐
- Spring rmi
- Struts2 全局结果类型<global-results>
- jvm内存模型
- java 中break、continue、return之间的区别与联系
- 解决firefox经常出现Adobe Flash 插件已崩溃
- C++逐行读取文本文件的正确做法
- sysfs创建目录:
- TCP堵塞控制
- adb shell 控制启动Activity、Service等
- 单链表 之c代码
- C++逐行读取文本文件的正确做法
- PySpark关于HDFS文件(目录)输入、数据格式的探讨
- Python学习 windows下面安装Python和pip(一)
- 在输入的字符串中判断是否有a,多种方法(比较前两种不同的表示方法)
- android studio的使用
- cocos-2dx 渲染(2)
- nginx对ip的访问频率进行限制(limit_req)和对ip连接数(并发量)进行限制(limit_conn)
- 我的openwrt学习笔记(六):MTK的OpenWrt系统编译以及下载
- hdu5400Arithmetic Sequence
- 【HDOJ 5399】Too Simple