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】【多執行緒】兩個執行緒間的通訊、wait、notify、notifyAllJava執行緒AI
- 多執行緒之間的通訊執行緒
- Java多執行緒學習——執行緒通訊Java執行緒
- 多執行緒之間通訊及執行緒池執行緒
- java多執行緒:執行緒間通訊——生產者消費者模型Java執行緒模型
- Android小知識-Java多執行緒相關(執行緒間通訊)上篇AndroidJava執行緒
- 說說Java執行緒間通訊Java執行緒
- Java多執行緒學習(五)執行緒間通訊知識點補充Java執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- JAVA - 基於Socket的多執行緒通訊Java執行緒
- Java-執行緒間通訊小結Java執行緒
- Swift多執行緒:使用Thread進行多執行緒間通訊,協調子執行緒任務Swift執行緒thread
- Java執行緒通訊Java執行緒
- Java多執行緒中的wait/notify通訊模式Java執行緒AI模式
- Android執行緒間通訊Android執行緒
- Java 執行緒間通訊 —— 等待 / 通知機制Java執行緒
- JUC之執行緒間的通訊執行緒
- 《Java 多執行緒程式設計核心技術》筆記——第3章 執行緒間通訊(三)Java執行緒程式設計筆記
- 《Java 多執行緒程式設計核心技術》筆記——第3章 執行緒間通訊(四)Java執行緒程式設計筆記
- Java之執行緒通訊Java執行緒
- java socket 通訊socketServer 服務端多執行緒JavaServer服務端執行緒
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒
- iOS GCD執行緒之間的通訊iOSGC執行緒
- Java 多執行緒學習(執行緒通訊——消費者和生產者)Java執行緒
- 【JAVA併發第三篇】執行緒間通訊Java執行緒
- 手撕Java多執行緒(四)執行緒之間的協作Java執行緒
- Java中的執行緒通訊詳解Java執行緒
- Java執行緒(九):Condition-執行緒通訊更高效的方式Java執行緒
- 多執行緒,執行緒類三種方式,執行緒排程,執行緒同步,死鎖,執行緒間的通訊,阻塞佇列,wait和sleep區別?執行緒佇列AI
- Java多執行緒—執行緒同步(單訊號量互斥)Java執行緒
- Java多執行緒-執行緒中止Java執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- Java多執行緒-執行緒池的使用Java執行緒
- Android開發之執行緒間通訊Android執行緒
- 執行緒間通訊_等待/通知機制執行緒
- 【Java多執行緒】輕鬆搞定Java多執行緒(二)Java執行緒