package test;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
* Created by rhwayfun on 16-4-3.
*/
public class ThreadTest {
private static DateFormat format = new SimpleDateFormat("HH:mm:ss");
public synchronized void tryOther(ThreadTest other) throws InterruptedException {
System.out.println(Thread.currentThread().getName() + " enter tryOther method at " + format.format(new Date()));
System.out.println(Thread.currentThread().getName() + " tryOther method is about to invoke other method at " + format.format(new Date()));
other.other();
}
public synchronized void other() throws InterruptedException {
System.out.println(Thread.currentThread().getName() + " enter other method atatatatat " + format.format(new Date()));
}
public static void main(String[] args) throws InterruptedException {
final ThreadTest d1 = new ThreadTest();
final ThreadTest d2 = new ThreadTest();
Thread t1 = new Thread(new Runnable() {
public void run() {
try {
d1.tryOther(d2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "threadA");
Thread t2 = new Thread(new Runnable() {
public void run() {
try {
d2.tryOther(d1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "threadB");
t1.start();
//让threadA先运行一秒
TimeUnit.SECONDS.sleep(1);
t2.start();
}
}
如上,随便找的产生死锁的代码,问题:TimeUnit.SECONDS.sleep(1);加上这行后,不存在死锁问题。sleep并不释放锁,为何这边死锁情况会消失。输出结果为:threadA enter tryOther method at 15:37:39threadA tryOther method is about to invoke other method at 15:37:39threadA enter other method atatatatat 15:37:39threadB enter tryOther method at 15:37:40threadB tryOther method is about to invoke other method at 15:37:40threadB enter other method atatatatat 15:37:40
注掉这行,正常死锁。输出结果为:threadB enter tryOther method at 15:37:10threadA enter tryOther method at 15:37:10threadB tryOther method is about to invoke other method at 15:37:10threadA tryOther method is about to invoke other method at 15:37:10
添加回答
举报
0/150
提交
取消