java生产者消费者---线程调度问题

今天下午去面试,被虐的很惨。心生寒意,作为一名应届生,我真的很想草那位面试官,叫我写spring注解代码的实现,各种算法的底层实现,各种数据结构的应用场合,SSHjar的整合配置,你是找我进来打代码的还是跟你研究底层代码实现的,还是想招高级架构师什么的,我想高级架构师什么的都不是投简历的吧,你虐我一名应届生有意思吗?我给你解释了Spring原理,hibernate缓存,数据算法的一些增删改查的优劣势,你叫我写如何的实现,我回答说不大记得了,然后就来了一句,大学不是修过这些课程吗?我操~~~这哪跟哪,你还记得你大一的时候撸了多少次管吗?呵呵~~你他妈的跟我较劲有意思吗?后来走的时候还一脸冷淡的不鸟人,我思索着得罪了他哪里,我还好客气的说了谢谢。不要这么心高气昂好吗?把自己捧得老高老高的,来欺负像我这种菜鸟,这怎么证明自己爬在程序员链条的的顶端位置吗?不过你技术比我牛逼而已,不过事后也总结了一下自己技术上的不足,再怎么说,如果自己技术过硬,也不会去碰壁。就是他妈不爽。

于是今晚写了一下消费者生产者模式如下:

1:

package com.thread.share;


public class Message {
private int id ;
private String content;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}


}



2:

package com.thread.share;


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


public class Quences {


/**
* @param args
*/
List <Message> messages = new ArrayList<Message>();
private  final int  MAX_COUNT;
boolean bs = true;
//private int count;
public Quences(int n){
this.MAX_COUNT = n;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Quences quences = new Quences(100);
Message message = new Message();
message.setId(1);
message.setContent("我是馒头");
Producter p1 = new Producter(message);
p1.setQuences(quences);
Consumer c = new Consumer(message);
c.setQuences(quences);
new Thread(p1).start();
new Thread(c).start();



public synchronized void add(Message message){
if (messages.size()>= MAX_COUNT){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
messages.add(message);
System.out.println(Thread.currentThread().getName() + ":生产馒头:"
+ message.getId() + "~~" + message.getContent());


this.notifyAll();

}

public synchronized void remove(Message message){

if(messages.size() <= 0 ){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
messages.remove(message);
System.out.println(Thread.currentThread().getName() + ":消费馒头:" 
+ message.getId()+ "~~~" + message.getContent());
this.notifyAll();
}


}



3:


package com.thread.share;


import java.util.List;


public class Producter implements Runnable {
private Message message;
private Quences quences ;
public Quences getQuences() {
return quences;
}
public void setQuences(Quences quences) {
this.quences = quences;
}
//List <Message> messages ;
public Producter(Message message){
this.message = message;

}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
this.quences.add(message);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


}


}


4



package com.thread.share;


import java.util.List;


public class Consumer implements Runnable {
private Message message;
private Quences quences ;
public Quences getQuences() {
return quences;
}
public void setQuences(Quences quences) {
this.quences = quences;
}
//List <Message> messages ;
public Consumer(Message message){
this.message = message;

}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
this.quences.remove(message);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}




}


}



控制台输出:

Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头
Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头
Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头
Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头
Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头
Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头
Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头
Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头
Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头
Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头
Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头
Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头
Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头
Thread-0:生产馒头:1~~我是馒头
Thread-1:消费馒头:1~~~我是馒头

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值