关于多线程 执行顺序
时间:2011-11-23
来源:互联网
题目是 :一个生产者 一个消费者 生产者生产一个 消费者 拿走一个
package com.Thread;
public class Demo_Text {
public static void main(String[] args) {
Buffers b = new Buffers();
new Thread(new Producter(b)).start();
new Thread(new Consumerss(b)).start();
}
}
class Producter implements Runnable{
Buffers b =null ;
public Producter(Buffers b){this.b = b;}
public void run() {
int i = 0 ;
while(true){
if(i==0) b.set("zShang", "male");
else b.set("lSi", "female");
i=(i+1)%2;
}
}
}
class Consumerss implements Runnable{
Buffers b =null ;
public Consumerss(Buffers b){this.b = b;}
public void run() {
while (true) {
b.get();
}
}
}
class Buffers{
private String name = "Unknown";
private String sex = "Unknown" ;
private boolean isFull = false;
public boolean set_ed = false;
public boolean get_ed = false;
public synchronized void set(String name ,String sex){
if(isFull)try{wait();}catch(Exception e){}
this.name = name ;
try{Thread.sleep(10);}catch(Exception e){}
this.sex = sex ;
isFull = true;
notify();
}
public synchronized void get(){
if(!isFull)try{wait();}catch(Exception e){}
System.out.print(this.name+":");
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(this.sex);
isFull = false;
notify();
}
}
代码是一个生产者和一个消费者
若是2 个生产者 和 2 个消费者 我要生产者1 生产后只准消费者1 拿走 然后在是生产者2 生产 也只准消费者2 拿走
在生产者1 .... 这样的执行 怎么思路??
package com.Thread;
public class Demo_Text {
public static void main(String[] args) {
Buffers b = new Buffers();
new Thread(new Producter(b)).start();
new Thread(new Consumerss(b)).start();
}
}
class Producter implements Runnable{
Buffers b =null ;
public Producter(Buffers b){this.b = b;}
public void run() {
int i = 0 ;
while(true){
if(i==0) b.set("zShang", "male");
else b.set("lSi", "female");
i=(i+1)%2;
}
}
}
class Consumerss implements Runnable{
Buffers b =null ;
public Consumerss(Buffers b){this.b = b;}
public void run() {
while (true) {
b.get();
}
}
}
class Buffers{
private String name = "Unknown";
private String sex = "Unknown" ;
private boolean isFull = false;
public boolean set_ed = false;
public boolean get_ed = false;
public synchronized void set(String name ,String sex){
if(isFull)try{wait();}catch(Exception e){}
this.name = name ;
try{Thread.sleep(10);}catch(Exception e){}
this.sex = sex ;
isFull = true;
notify();
}
public synchronized void get(){
if(!isFull)try{wait();}catch(Exception e){}
System.out.print(this.name+":");
try{Thread.sleep(10);}catch(Exception e){}
System.out.println(this.sex);
isFull = false;
notify();
}
}
代码是一个生产者和一个消费者
若是2 个生产者 和 2 个消费者 我要生产者1 生产后只准消费者1 拿走 然后在是生产者2 生产 也只准消费者2 拿走
在生产者1 .... 这样的执行 怎么思路??
作者: ganhuihuikukuku 发布时间: 2011-11-23
我的想法是 生产者1 生产完后 把自己给wait() 把生产者2 notify()
消费者1 拿走后把自己wait() 把消费者2notify()
生产者2 生产完后 把自己给wait() 把生产者1 notify()
消费者2 拿走后把自己wait() 把消费者1notify()
在生产者1 和生产者2各自的构造方法里传buffer 和 对应的生产者对象
在消费者1 和消费者2各自的构造方法里传buffer 和 对应的消费者对象
在其中一个生产者和其中一个消费者 做个单例 好调用....
不知道行不行 . 多线程没学习. 自己的想法. 谢谢大家的解答
消费者1 拿走后把自己wait() 把消费者2notify()
生产者2 生产完后 把自己给wait() 把生产者1 notify()
消费者2 拿走后把自己wait() 把消费者1notify()
在生产者1 和生产者2各自的构造方法里传buffer 和 对应的生产者对象
在消费者1 和消费者2各自的构造方法里传buffer 和 对应的消费者对象
在其中一个生产者和其中一个消费者 做个单例 好调用....
不知道行不行 . 多线程没学习. 自己的想法. 谢谢大家的解答
作者: ganhuihuikukuku 发布时间: 2011-11-23
不知道你为什么要这要做,但是给你个思路吧,给馒头对象增加一个属性productId,每生产一个馒头都为这个属性赋值说明是哪个生产者生产的馒头,然后每当消费者被唤醒去吃馒头时都去判断如果不符合你的条件,让他继续睡眠,直到唤醒的是你想要的那个消费者是再继续执行代码.
作者: leilei0932_java 发布时间: 2011-11-23
这个想法是我看视频自己想的
是不是这样:
把生产者的productId 初始都为0 ;
我把生产者1 生产的产品编号 让它的productId没生产一次就++
把生产者2 生产的产品编号 让它的productId没生产一次就--
消费者吃的时候判断生产者的productId
productId > 0 消费者1 拿走
productId < 0 消费者2 拿走
但是在确定productId 之后 让另一个消费者 等待
在生产一个productId 后让另一个生产者等待
是不是这样:
把生产者的productId 初始都为0 ;
我把生产者1 生产的产品编号 让它的productId没生产一次就++
把生产者2 生产的产品编号 让它的productId没生产一次就--
消费者吃的时候判断生产者的productId
productId > 0 消费者1 拿走
productId < 0 消费者2 拿走
但是在确定productId 之后 让另一个消费者 等待
在生产一个productId 后让另一个生产者等待
作者: ganhuihuikukuku 发布时间: 2011-11-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28