生產消費模式及流程圖

流程圖
 java

JAVA生產消費模式 - wj495175289 - 臭皮匠

 



package thread.stack;

import java.util.ArrayList;
import java.util.List;

/**
* 自制的棧(數據結構)

*/
public class Stack {

//堆棧數據結構實現的輔助變量
private List myList = new ArrayList();

/**
* 從集合中往外出字符
*/
public synchronized char pop() {
char temp;

// 當集合爲空的時候直接等待
// 把資源直接交給另外一個線程運行
while (myList.size() == 0) {
try {
System.out.println("集合中元素爲空,等待生產者生產元素……");
wait();
} catch (Exception e) {
e.printStackTrace();
}

}

// 獲得最後一個字符
temp = ((Character) (myList.get(myList.size() - 1))).charValue();

// 刪除最後一個元素
myList.remove(myList.size() - 1);
// 當前線程的名字
String threadName = Thread.currentThread().getName();

System.out.println("消費者" + threadName + ":" + "消費了字符" + temp);

return temp;
}

/**
* 往集合裏面添加字符
* @param c
*/
public synchronized void push(char c) {

// 添加元素
myList.add(c);

//當前線程的名字
String threadName = Thread.currentThread().getName();

System.out.println("生產者" + threadName + ":" + "生產了字符" + c);
// 喚醒其餘線程
this.notify();
}

}

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
package thread.stack;

/**
* 消費者類

*/
public class Consumer implements Runnable {

private Stack stack;

/**
* 生產者構造方法
*/
public Consumer(Stack stack) {
this.stack = stack;
}

/**
* 消費商品方法
*/
public void con() {
char c;

for (int i = 0; i < 200 i br>
// 集合(堆棧)中輸出元素
c = stack.pop();

try {

// 等待30毫秒
Thread.sleep(30);
} catch (Exception e) {
e.printStackTrace();
}
}

}

public void run() {
this.con();
}

}

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
package thread.stack;

/**
* 生產者類

*/
public class Producer implements Runnable {

private Stack stack;

/**
* 生產者構造方法
*/
public Producer(Stack stack) {
this.stack = stack;
}

/**
* 生產商品方法
*/
public void pro() {
char c;

for (int i = 0; i < 200 i br>
// 隨機生成大寫字母字符
c = (char) (Math.random() * 26 + 'A');

//往集合(堆棧)中添加元素
stack.push(c);

try {

//等待30毫秒
Thread.sleep(30);
} catch (Exception e) {
e.printStackTrace();
}
}

}

public void run() {
this.pro();
}

}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
package thread.stack;

/**
* 客戶端測試類

*/
public class Client {

public static void main(String[] args) {

//1.準備堆棧數據結構
Stack stack = new Stack();

//2.準備生產者線程
Producer producer1 = new Producer(stack);
Thread t1 = new Thread(producer1);

Producer producer2 = new Producer(stack);
Thread t2 = new Thread(producer2);

//3.準備消費者線程
Consumer consumer1 = new Consumer(stack);
Thread t3 = new Thread(consumer1);

Consumer consumer2 = new Consumer(stack);
Thread t4 = new Thread(consumer2);


t3.start();
t4.start();


t1.start();
t2.start();

}

}數據結構

相關文章
相關標籤/搜索