`
dickyzhu
  • 浏览: 107448 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

多线程

阅读更多

模拟消费者与生产者:

package com.cognizant.consumerandproducer;

public class SyncStack {
private String[] products = new String[10];
private int index;

public synchronized void push(String product) {
if (index == product.length()) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
notify();
products[index] = product;
index++;
}

public synchronized String pop() {
if (index == 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
notify();
index--;
String product = products[index];
return product;
}
public String[] getProducts(){
return products;
}
}

package com.cognizant.consumerandproducer;

public class Producer implements Runnable{
private SyncStack stack;
public Producer(SyncStack stack){
this.stack=stack;
}
public void run(){
for(int i =0;i<stack.getProducts().length;i++){
String product="product"+i;
stack.push(product);
System.out.println("the producer produced"+i);
try{
Thread.sleep(200);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}

package com.cognizant.consumerandproducer;

public class Consumer implements Runnable{
private SyncStack stack;
public Consumer(SyncStack stack){
this.stack=stack;
}
public void run(){
for(int i=0;i<stack.getProducts().length;i++){
String product=stack.pop();
System.out.println("the consumer consumed product"+product);
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}

package com.cognizant.consumerandproducer;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SyncStack stack = new SyncStack();
Producer producer=new Producer(stack);
Consumer consumer=new Consumer(stack);

new Thread(producer).start();
new Thread(consumer).start();
}

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics