Java-基礎程式設計-多執行緒
目錄
一:程式,程式,執行緒
二.使用多執行緒的優點
三:執行緒的建立和啟動
四. Thread類的有關方法
五.執行緒的生命週期
六.執行緒的同步
七.執行緒的通訊
八:經典的生產者消費者例題
執行緒通訊的應用:經典例題:生產者/消費者問題
生產者(Producer)將產品交給店員(Clerk),而消費者(Customer)從店員處取走產品,
店員一次只能持有固定數量的產品(比如20),如果生產者試圖生產更多的產品,店員會叫
生產者停一下,如果店中有空位放產品了再通知生產者繼續生產;如果店中沒有產品了,店
員會告訴消費者等一下,如果店中有產品了再通知消費者來取走產品
分析:
1)是否是多執行緒問題? 是,生產者執行緒,消費者執行緒
2)是否有共享資料? 是, 店員(或者產品)
3)如何解決執行緒的安全問題? 同步機制,有三種方法
4)是否涉及執行緒的通訊? 是
程式碼解決:
class Clerk{
private int productCount = 0;
// 生產產品
public synchronized void produceProduct() {
if(productCount < 20) {
productCount++;
System.out.println(Thread.currentThread().getName() + ":開始生產第" + productCount);
notify();
}else {
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 消費產品
public synchronized void consumeProduct() {
if(productCount > 0) {
System.out.println(Thread.currentThread().getName() + ":開始消費第"+ productCount);
productCount--;
notify();
}else {
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Producer extends Thread{
private Clerk clerk;
public Producer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
System.out.println(getName()+":開始生產產品......");
while(true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
clerk.produceProduct();
}
}
}
class Consumer extends Thread{
private Clerk clerk;
public Consumer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
System.out.println(getName()+":開始消費產品......");
while(true) {
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
clerk.consumeProduct();
}
}
}
public class ProductTest {
public static void main(String[] args) {
Clerk clerk = new Clerk();
Producer p1 = new Producer(clerk);
p1.setName("生產者1");
Consumer c1 = new Consumer(clerk);
c1.setName("消費者1");
Consumer c2 = new Consumer(clerk);
c1.setName("消費者2");
p1.start();
c1.start();
c2.start();
}
}
相關文章
- 多執行緒程式設計基礎(一)-- 執行緒的使用執行緒程式設計
- 多執行緒程式設計基礎(二)-- 執行緒池的使用執行緒程式設計
- Java-基礎-執行緒入門Java執行緒
- Java多執行緒程式設計基礎知識彙總Java執行緒程式設計
- Java基礎之多執行緒程式設計Java執行緒程式設計
- Java 多執行緒設計模式之基礎概念Java執行緒設計模式
- 多執行緒系列(1),多執行緒基礎執行緒
- 併發程式設計之多執行緒基礎程式設計執行緒
- Java併發程式設計-執行緒基礎Java程式設計執行緒
- 多執行緒基礎執行緒
- 多執行緒學習一(多執行緒基礎)執行緒
- python 多執行緒程式設計Python執行緒程式設計
- JavaScript多執行緒程式設計JavaScript執行緒程式設計
- Python多執行緒程式設計Python執行緒程式設計
- 程式執行緒篇——程式執行緒基礎執行緒
- pthread 多執行緒基礎thread執行緒
- python多執行緒基礎Python執行緒
- java - 多執行緒基礎Java執行緒
- 執行緒和程式基礎以及多執行緒的基本使用(iOS)執行緒iOS
- JAVA SE 實戰篇 C1 多執行緒程式設計基礎Java執行緒程式設計
- Java 多執行緒基礎(四)執行緒安全Java執行緒
- 多執行緒系列(三):執行緒池基礎執行緒
- [短文速讀 -5] 多執行緒程式設計引子:程式、執行緒、執行緒安全執行緒程式設計
- 多執行緒基礎-基礎實現執行緒
- 多執行緒程式設計ExecutorService用法執行緒程式設計
- 29. 多執行緒程式設計執行緒程式設計
- Java 多執行緒基礎(八)執行緒讓步Java執行緒
- Java多執行緒-基礎篇Java執行緒
- Java 多執行緒基礎 - CyclicBarrierJava執行緒
- 基礎鞏固 --多執行緒執行緒
- 多執行緒基礎知識執行緒
- 多執行緒基礎入門執行緒
- 多執行緒程式設計總結:一、認識多執行緒本質執行緒程式設計
- 深入理解多執行緒程式設計執行緒程式設計
- [02] 多執行緒邏輯程式設計執行緒程式設計
- Linux C++ 多執行緒程式設計LinuxC++執行緒程式設計
- iOS開發-多執行緒程式設計iOS執行緒程式設計
- Task+ConcurrentQueue多執行緒程式設計執行緒程式設計