看下面的代码, 我在同步方法中拿到了当前对象锁, 接着在方法内声明了同步代码块, 这时候是不是应该是死锁, 但是程序运行却没有出现死锁问题
public class ThreadTest {
public static void main(String[] args) {
final MyCode mc = new MyCode();
//开启了两个线程
new Thread() {
public void run() {
while (true)
try {
mc.print1(); //调用mc中的方法1
} catch (InterruptedException e) {
}
}
}.start();
new Thread() {
public void run() {
while (true)
try {
mc.print2(); //调用mc中的方法2
} catch (InterruptedException e) {
}
}
}.start();
}
}
//这个类有两个方法
class MyCode {
int flag = 1;
public synchronized void print1() throws InterruptedException { //同步方法
synchronized(this) { //同步代码块, 这里为什么没有出现死锁, 方法拿到锁, 代码块是不是不能得到锁
if (flag != 1)
wait();
System.out.print("C");
System.out.print("S");
System.out.print("D");
System.out.print("N");
System.out.print("\r\n");
notify();
flag = 2;
}
}
public void print2() throws InterruptedException {
synchronized(this) {
if (flag != 2)
wait();
System.out.print("黑");
System.out.print("马");
System.out.print("程");
System.out.print("序");
System.out.print("员");
System.out.print("\r\n");
notify();
flag = 1;
}
}
}