日期:2014-05-20 浏览次数:20962 次
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++;
}
}
}