日期:2014-05-20 浏览次数:20707 次
package testio; import java.util.LinkedList; import java.util.Queue; import java.util.Random; public class TestList { private Queue<Integer> queue = new LinkedList<Integer>(); public synchronized boolean offer(Integer i) { return queue.offer(i); } public synchronized Integer poll() { return queue.poll(); } /** * @param args */ public static void main(String[] args) { TestList tl = new TestList(); new Thread(tl.new O()).start(); Thread t = new Thread(tl.new P()); t.setDaemon(true); t.start(); } class O implements Runnable { @Override public void run() { Random rand = new Random(); for (int i = 0; i <= 9; i++) { Integer interger = rand.nextInt(); System.out.println("offer " + interger); offer(interger); } } } class P implements Runnable { @Override public void run() { while (true) { Integer i; if ((i = poll()) != null) System.out.println("poll " + i); } } } }
------解决方案--------------------
import java.util.ArrayList; import java.util.List; import java.util.Random; public class Queue{ List<Integer> Integers = new ArrayList<Integer>(); int maxSize = 4; int count = 0; public Queue(){ } public synchronized void add(Integer e){ if(Integers.size()==maxSize){ try { this.wait(); } catch (InterruptedException e1) { e1.printStackTrace(); } } this.notifyAll(); if(Integers.size()<maxSize){ System.out.println(Thread.currentThread().getName()+ " " + e); Integers.add(e); count++; } } public synchronized void remove(){ if(Integers.size()==0){ try { this.wait(); } catch (InterruptedException e1) { e1.printStackTrace(); } } this.notifyAll(); if(Integers.size()>0){ System.out.println(Thread.currentThread().getName()+" "+this.Integers.get(0)); Integers.remove(0); } } public static void main(String args[]){ Queue q = new Queue(); Create c= new Create(q); PullOut po = new PullOut(q); new Thread(c).start(); new Thread(po).start(); } } class Create implements Runnable{ String name = "生产者"; private Queue q; public Create(Queue q){ this.q = q; } @Override public void run(){ int count=0; Random r =new Random(); while(count<10){ int number = r.nextInt()%20; q.add(number); try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } count++; } } } class PullOut implements Runnable{ String name = "消费者"; private Queue q; public PullOut(Queue q){ this.q = q; } @Override public void run(){ int count=0; while(count<10){ q.remove(); try { Thread.sleep(800); } catch (InterruptedException e) { e.printStackTrace(); } count++; } } }