多執行緒 -- 初學簡單例子
多執行緒初學
- 該模式是生產者--消費者模式。
- 規定了兩個任務內部類,Consumer 和Producer .
- Producer負責給 num 加1,Consumer 負責給num 減 1。
- run()方法只是負責任務,不負責啟動。
- 通過 new Thread(new Producer()) 將任務分配給執行緒。通過start()方法開啟執行緒。
- Main 執行緒中有 執行緒Consumer 的例項consumer ,以及Producer 的例項 producer,所以可以說看的到另外兩個執行緒,所以可以對其他執行緒進行一定程度的操作。
- consumer ,producer不知道Main執行緒,彼此也不知道,所以可以通過Main執行緒作為中介,使之發生聯絡。比如說,在main中,將producer傳給consumer(一般不建議這麼做。),可以使用監聽者模式。
- synchronized注意同步,為了正確共享資源。
程式碼如下:
package tree.test.testThread;
import java.util.Observable;
import java.util.Observer;
public class TestConsumer {
public static int num = 0;
public final static int CONSUMER_SLEEP_TIME = 50;
public final static int PRODUCER_SLEEP_TIME = 40;
@SuppressWarnings("deprecation")
public static void main(String[] args) {
System.out.println("started `````");
Thread consumer = new Thread(new Consumer());
Thread producer = new Thread(new Producer());
consumer.start();
producer.start();
try {
Thread.sleep(2000);
Thread.yield();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("ended `````");
//TODO main thread tell others to stop
consumer.stop();
producer.stop();
}
static class Producer implements Runnable,Observer {
public void run() {
synchronized (this) {
while (true) {
num++;
System.out.println("after produce , num = " + num);
try {
Thread.sleep(PRODUCER_SLEEP_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void update(Observable o, Object arg) {
//TODO how to use the pattern observer to control the thread end time .
}
}
static class Consumer implements Runnable {
public void run() {
synchronized (this) {
while (true) {
try {
if (num > 0) {
num--;
System.out.println("after consume , num = " + num);
} else {
System.out.println("nothing in the pool !!");
}
Thread.sleep(CONSUMER_SLEEP_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
相關文章
- 多執行緒賣火車票簡單例子執行緒單例
- Python簡單實現多執行緒例子Python執行緒
- 以生活例子說明單執行緒與多執行緒執行緒
- 執行緒和執行緒池的理解與java簡單例子執行緒Java單例
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒
- 【原創】Java多執行緒初學者指南(1):執行緒簡介Java執行緒
- Golang多執行緒簡單鬥地主Golang執行緒
- wxWidgets簡單的多執行緒執行緒
- Java多執行緒下載的例子。Java執行緒
- Java多執行緒就是這麼簡單Java執行緒
- 【Java】【多執行緒】執行緒池簡述Java執行緒
- Java多執行緒之join()的使用初學習Java執行緒
- ObjC 多執行緒簡析(一)-多執行緒簡述和執行緒鎖的基本應用OBJ執行緒
- 【多執行緒系列】CAS、AQS簡單介紹執行緒AQS
- java多執行緒 wait() notify()簡單使用Java執行緒AI
- 簡單的多執行緒複製檔案執行緒
- Java簡單多執行緒斷點下載Java執行緒斷點
- 多執行緒之死鎖就是這麼簡單執行緒
- 多執行緒學習一(多執行緒基礎)執行緒
- 【多執行緒】常見問題簡單總結執行緒
- python 多執行緒就這麼簡單(續)Python執行緒
- 教小師妹學多執行緒,一個有深度的例子!執行緒
- Java多執行緒的wait()和notify()例子Java執行緒AI
- 執行緒的【生命週期】和【執行緒的同步】(多視窗售票例子)執行緒
- 瀏覽器多執行緒和js單執行緒瀏覽器執行緒JS
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- 騰訊遊戲學院專家:做一個多執行緒遊戲框架可以多簡單?遊戲執行緒框架
- 簡單的執行緒池執行緒
- C#多執行緒學習(四) 多執行緒的自動管理(執行緒池)C#執行緒
- C# 多執行緒學習(4) :多執行緒的自動管理(執行緒池)C#執行緒
- 多執行緒的初級使用,新手福利執行緒
- 簡易多執行緒下載執行緒
- Java多執行緒—執行緒同步(單訊號量互斥)Java執行緒
- redis為什麼用單執行緒不用多執行緒Redis執行緒
- #大學#Java多執行緒學習02(執行緒同步)Java執行緒
- 多執行緒和多執行緒同步執行緒