package com.chong;
public class Main {
public static void main(String args[]){
Object obj=new Object();
Thread t1=new Thread(new Runnable() {
@Override
public void run() {
synchronized (obj) {
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("t1 end");
}
}
});
Thread t2=new Thread(new Runnable() {
@Override
public void run() {
synchronized (obj) {
obj.notify();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("t2 end");
}
}
});
t1.start();
t2.start();
}
}
如上代码,结果是:
t2先执行完,t1后执行完。
查资料,notify()方法是通知一个等待在该对象上的线程,不会释放锁。
那么,obj.notify()方法,写在同步代码块里的最开始或者最末尾处,jvm内部处理逻辑上有什么差异吗?平时写代码,在这里有什么需要注意的点吗?