public class TestDeadLock implements Runnable
{
Object o1 = new Object();
Object o2 = new Object();
public int flag = 1;
public void run(){
System.out.println("flag="+ flag);
if(flag == 1){
synchronized(o1){
try{
Thread.sleep(500);
}catch(Exception e){}
}
synchronized(o2){
System.out.println("0");
}
}
if(flag == 0){
synchronized(o2){
try{
Thread.sleep(500);
}catch(Exception e){}
}
synchronized(o1){
System.out.println("1");
}
}
} public static void main(String[] args)
{
TestDeadLock td1 = new TestDeadLock();
TestDeadLock td2 = new TestDeadLock();
td1.flag = 1;
td2.flag = 0;
//new Thread(td1).start();
//new Thread(td2).start();
Thread t1 = new Thread(td1);
Thread t2 = new Thread(td2);
t1.start();
t2.start();
}
}
{
Object o1 = new Object();
Object o2 = new Object();
public int flag = 1;
public void run(){
System.out.println("flag="+ flag);
if(flag == 1){
synchronized(o1){
try{
Thread.sleep(500);
}catch(Exception e){}
}
synchronized(o2){
System.out.println("0");
}
}
if(flag == 0){
synchronized(o2){
try{
Thread.sleep(500);
}catch(Exception e){}
}
synchronized(o1){
System.out.println("1");
}
}
} public static void main(String[] args)
{
TestDeadLock td1 = new TestDeadLock();
TestDeadLock td2 = new TestDeadLock();
td1.flag = 1;
td2.flag = 0;
//new Thread(td1).start();
//new Thread(td2).start();
Thread t1 = new Thread(td1);
Thread t2 = new Thread(td2);
t1.start();
t2.start();
}
}
解决方案 »
- eclipse是否自带了JDK和JRE,如果不是,那是否要去官网分别下载JDK和JRE
- 高手近来 问下ISO 10646和unicode的区别 在线等
- 有人说这是BUG。关于CachedRowSet的问题
- 如何用Java计算字符串表示的表达式的值?
- 谁能说明该程序编译执行过程。
- 关于jni与命令行通配符
- 关于JNI中函数传递中文字符的问题
- 如何使JOptionPane.showConfirmDialog(null,"thisi asdf","sdffsd",JOptionPane.YES_NO_OPTION);在客户端显示?
- java.util.Locale ?
- 关于java中菜单事件的监听问题,求各位大神!
- java IO问题求助!
- java音频处理
楼主可以把对象o1,o2该成静态试试。这样的话,对于td1和td2,o1和o2是同一个。
static Object o1 = new Object();
static Object o2 = new Object();
synchronized(o2){
System.out.println("0");
}
放到synchronized(o1)里面.
这样会出现得到一个锁争用另一个的情况.
synchronized(o1)
{
try
{
Thread.sleep(500);
}
catch(Exception e)
{}
synchronized(o2)
{
System.out.println("0");
}
}
synchronized(o1){
System.out.println("1");
}
放到synchronized(o2)里。
synchronized(o2)
{
try
{
Thread.sleep(500);
}
catch(Exception e)
{}
synchronized(o1)
{
System.out.println("1");
}
}