首页 > 代码库 > Java多线程同步——生产者消费者问题
Java多线程同步——生产者消费者问题
这是马士兵老师的Java视频教程里的一个生产者消费者问题的模型
[java] view plaincopy
- public class ProduceConsumer{
- public static void main(String[] args){
- SyncStack ss = new SyncStack();
- Producer pro = new Producer(ss);
- Consumer con = new Consumer(ss);
- new Thread(pro).start();
- new Thread(con).start();
- }
- }
- class Product{
- int id;
- public Product(int id){
- this.id = id;
- }
- public String toString(){
- return "Product:" + id;
- }
- }
- class SyncStack{
- int index = 0;
- Product[] arrPro = new Product[6];
- public synchronized void push(Product p){
- while (index == arrPro.length){
- try {
- this.wait();
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- this.notify();
- arrPro[index] = p;
- index++;
- }
- public synchronized Product pop(){
- while (index == 0){
- try {
- this.wait();
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- this.notify();
- index--;
- return arrPro[index];
- }
- }
- class Producer implements Runnable{
- SyncStack ss = null;
- public Producer(SyncStack ss){ //持有SyncStack的一个引用
- this.ss = ss;
- }
- @Override
- public void run() {
- for(int i=0; i<20; i++){
- Product p = new Product(i);
- ss.push(p);
- System.out.println("生产了:" + p);
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
- class Consumer implements Runnable{
- SyncStack ss = null;
- public Consumer(SyncStack ss){ //持有SyncStack的一个引用
- this.ss = ss;
- }
- @Override
- public void run() {
- for(int i=0; i<20; i++){
- Product p = ss.pop();
- System.out.println("消费了:" + p);
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
Java多线程同步——生产者消费者问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。