public class TestDeadLock implements Runnable{
static Object o1 = new Object();
static Object o2 = new Object();
int flag = 1;
public static void main(String[] args){
TestDeadLock test1 = new TestDeadLock();
TestDeadLock test2 = new TestDeadLock();
test1.flag = 0;
test2.flag = 1;
Thread t1 = new Thread(test1);
Thread t2 = new Thread(test2);
t1.start();
t2.start();
}
public void run(){
if(flag == 0){
System.out.println("000000");
synchronized(o1){
try{
Thread.sleep(1000);
}catch(InterruptedException e){
System.out.println("??????????????");
}
synchronized(o2){
System.out.println("111111111");
}
}
}
if(flag == 1){
System.out.println("111111");
synchronized(o2){
try{
Thread.sleep(1000);
}catch(InterruptedException e){
System.out.println("??????????????");
}
synchronized(o1){
System.out.println("22222");
}
}
}
}
}如上,当程序的Object两个对象不为static类型时,不能形成死锁机制..这是怎么回事??
解决方案 »
- HtmlParser提取页面内容
- 问下关于匹配字符串
- FileOutputStream跟ObjectOutputStream 创建文件的怪异现象
- J2SE简单问题
- LinkedHashMap的负载因子干啥用的?
- 各位谁有比较好的短信二次开发控件,或者有没有金笛的java版,急需,100分相送,另加500分
- 谁能教教我,怎么在一个java程序打开一个dwg文件(AutoCad生成的文件)
- 求助JAVA 局域网内借助ODBC/jdbc 如何访问sqlserver?
- java里类的成员函数的定义和申明可以分开么?
- 再次请教关于jdbc的问题,还是一定给分!!
- Jdeveloper如何remove文件
- 谁能帮我备注一下这个冒泡,初学者看不懂
那么总共就有 4 个 Object 和 两个 TestDeadLock 对象
锁
不用static 的话 test1 的 o1 与 test2的o1 是不同对象,加锁是针对各自的对象