如果一个对象的锁被一个线程持有(执行某个同步方法),这个对象的其他线程将不能执行这个对象的任何其他同步方法
package juc;
import java.util.concurrent.TimeUnit;
public class Dataxx {
public synchronized void sing() throws InterruptedException {
System.out.println(Thread.currentThread().getName() + " sing");
TimeUnit.SECONDS.sleep(20);
System.out.println("sing,wait 20 and end");
}
public void eat()
{
System.out.println(Thread.currentThread().getName() + " eat");
}
public synchronized void hi() throws InterruptedException {
System.out.println(Thread.currentThread().getName() + " hi");
}
}
package juc;
import java.util.concurrent.TimeUnit;
public class TTT {
public static void main(String[] args) throws InterruptedException {
Dataxx d = new Dataxx();
for (int i = 0; i < 10; i++) {
if(i==3){
new Thread(()->{
try {
d.sing();
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
TimeUnit.SECONDS.sleep(1);
}
new Thread(()->{
try {
d.hi();
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(()->{d.eat();}).start();
}
}
}