生产消费模式及流程图

2020-04-14  本文已影响0人  游侠_6fb7

流程图


868641-20170303152707641-1755807475.png

package thread.stack;

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

/**

*/
public class Stack {

//堆栈数据结构实现的辅助变量
private List myList = new ArrayList();

/**

// 当集合为空的时候直接等待
// 把资源直接交给另一个线程运行
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;
}

/**

// 添加元素
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;

/**

/**

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;

/**

/**

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();

}

}

上一篇下一篇

猜你喜欢

热点阅读