今天下午去面试,被虐的很惨。心生寒意,作为一名应届生,我真的很想草那位面试官,叫我写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~~~我是馒头