有什么錯(cuò)誤,請(qǐng)指正褥民,共同學(xué)習(xí)
### wait sleep notify notifyAll
#### 1、sleep依舊占用鎖
#### 2挣棕、wait釋放鎖
#### 3译隘、wait notify notify 必須在鎖內(nèi)執(zhí)行
#### 4、notify只有一個(gè)線程能夠執(zhí)行下去,具體哪個(gè)線程洛心,如果沒(méi)有優(yōu)先級(jí)固耘,則隨機(jī)
#### 5、notifyAll 所有線程都會(huì)獲得鎖词身、繼續(xù)執(zhí)行下去
#### 6厅目、wait不能保證時(shí)間到或者notify了立即執(zhí)行,只會(huì)去請(qǐng)求鎖
代碼
public class WaitTest {
private static final List<Integer> list=new ArrayList<Integer>();
public static void main(String[] args) throws InterruptedException {
System.out.println("main.begin."+getTime());
for (int i = 0; i < 10; i++) {
final int finalI = i;
new Thread(new Runnable() {
@Override
public void run() {
try {
add(finalI);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
Thread.sleep(5000);
synchronized (list) {
list.notify();
// list.notifyAll();
}
System.out.println("main.end."+getTime());
}
private static void add(int i) throws InterruptedException {
synchronized (list) {
System.out.println("add" + i + ".wait." + getTime());
list.wait();
System.out.println("add" + i + ".run.begin." + getTime());
list.add(1);
Thread.sleep(1000);
System.out.println("add" + i + ".run.end." + getTime());
}
}
private static String getTime() {
return new SimpleDateFormat("mmssSSS").format(new Date());
}
}
結(jié)果
// notifyAll
main.begin.0817944
add1.wait.0817945
add2.wait.0817946
add5.wait.0817946
add6.wait.0817946
add9.wait.0817946
add0.wait.0817946
add4.wait.0817947
add8.wait.0817947
add3.wait.0817947
add7.wait.0817947
main.end.0822946
add7.run.begin.0822946
add7.run.end.0823947
add3.run.begin.0823947
add3.run.end.0824947
add8.run.begin.0824947
add8.run.end.0825948
add4.run.begin.0825949
add4.run.end.0826949
add0.run.begin.0826949
add0.run.end.0827950
add9.run.begin.0827950
add9.run.end.0828950
add6.run.begin.0828950
add6.run.end.0829951
add5.run.begin.0829951
add5.run.end.0830952
add2.run.begin.0830952
add2.run.end.0831952
add1.run.begin.0831952
add1.run.end.0832953
// notify 程序未結(jié)束
main.begin.2422235
add0.wait.2422236
add1.wait.2422237
add2.wait.2422237
add4.wait.2422237
add5.wait.2422237
add9.wait.2422237
add6.wait.2422237
add7.wait.2422237
add3.wait.2422237
add8.wait.2422237
add0.run.begin.2427238
main.end.2427238
add0.run.end.2428239
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者