java多執行緒間的通訊
wait/notify
1.wait 方法是釋放鎖,notify 方法是不釋放鎖的
2.notify 每次喚醒 wait 等待狀態的執行緒都是隨機的,且每次只喚醒一個。
public class MyList {
private static List list = new ArrayList();
public static void add() {
list.add("我是元素");
}
public static int size() {
return list.size();
}
}
public class ThreadA extends Thread {
private Object lock;
public ThreadA(Object lock) {
super();
this.lock = lock;
}
@Override
public void run() {
try {
synchronized (lock) {
if (MyList.size() != 5) {
System.out.println("wait begin " + System.currentTimeMillis());
lock.wait();
System.out.println("wait end " + System.currentTimeMillis());
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class ThreadB extends Thread {
private Object lock;
public ThreadB(Object lock) {
super();
this.lock = lock;
}
@Override
public void run() {
try {
synchronized (lock) {
for (int i = 0; i < 10; i++) {
MyList.add();
if (MyList.size() == 5) {
lock.notify();
System.out.println("已發出通知!");
}
System.out.println("新增了" + (i + 1) + "個元素!");
Thread.sleep(1000);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Run {
public static void main(String[] args) {
try {
Object lock = new Object();
ThreadA a = new ThreadA(lock);
a.start();
Thread.sleep(50);
ThreadB b = new ThreadB(lock);
b.start();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
wait begin 1545373376331
新增了1個元素!
新增了2個元素!
新增了3個元素!
新增了4個元素!
已發出通知!
新增了5個元素!
新增了6個元素!
新增了7個元素!
新增了8個元素!
新增了9個元素!
新增了10個元素!
wait end 1545373386385
相關文章
- java多執行緒5:執行緒間的通訊Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- 多執行緒之間的通訊執行緒
- 徹底明白Java的多執行緒-執行緒間的通訊(2)(轉)Java執行緒
- 徹底明白Java的多執行緒-執行緒間的通訊(1)(轉)Java執行緒
- 【Java】【多執行緒】兩個執行緒間的通訊、wait、notify、notifyAllJava執行緒AI
- Java多執行緒學習——執行緒通訊Java執行緒
- 多執行緒之間通訊及執行緒池執行緒
- java多執行緒:執行緒間通訊——生產者消費者模型Java執行緒模型
- 說說Java執行緒間通訊Java執行緒
- 執行緒間的通訊執行緒
- Android小知識-Java多執行緒相關(執行緒間通訊)上篇AndroidJava執行緒
- Java多執行緒學習(五)執行緒間通訊知識點補充Java執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- JAVA - 基於Socket的多執行緒通訊Java執行緒
- Java-執行緒間通訊小結Java執行緒
- 執行緒4--執行緒間通訊執行緒
- Java執行緒通訊Java執行緒
- Java中快如閃電的執行緒間通訊Java執行緒
- Swift多執行緒:使用Thread進行多執行緒間通訊,協調子執行緒任務Swift執行緒thread
- Java 執行緒間通訊 —— 等待 / 通知機制Java執行緒
- JUC之執行緒間的通訊執行緒
- Java多執行緒/併發11、執行緒同步通訊:notify、waitJava執行緒AI
- Java之執行緒通訊Java執行緒
- Java多執行緒中的wait/notify通訊模式Java執行緒AI模式
- Android執行緒間通訊Android執行緒
- 大話Android多執行緒(三) 執行緒間的通訊機制之HandlerAndroid執行緒
- 《Java 多執行緒程式設計核心技術》筆記——第3章 執行緒間通訊(三)Java執行緒程式設計筆記
- 《Java 多執行緒程式設計核心技術》筆記——第3章 執行緒間通訊(四)Java執行緒程式設計筆記
- java socket 通訊socketServer 服務端多執行緒JavaServer服務端執行緒
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒
- iOS GCD執行緒之間的通訊iOSGC執行緒
- Java中利用管道實現執行緒間的通訊(轉)Java執行緒
- Java 多執行緒學習(執行緒通訊——消費者和生產者)Java執行緒
- 【JAVA併發第三篇】執行緒間通訊Java執行緒
- Java多執行緒——獲取多個執行緒任務執行完的時間Java執行緒
- Java通過wait()和notifyAll()方法實現執行緒間的通訊JavaAI執行緒
- Java中的執行緒通訊詳解Java執行緒