作者:手机用户2502863351 | 来源:互联网 | 2023-09-14 11:24
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748package com.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| 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内部处理逻辑上有什么差异吗?平时写代码,在这里有什么需要注意的点吗?