阻塞队列的使用案例

import java.util.Random;
import java.util.concurrent.LinkedTransferQueue;
import java.util.concurrent.TransferQueue;


public class TransferQueueLearn {

    public static void main(String[] args) {
    
        TransferQueue<String> queue = new LinkedTransferQueue<String>();
        
        Thread productor = new Thread(new Productor(queue));
        productor.setDaemon(true);
        productor.start();
        
        for (int i = 0; i < 10; i++) {
            Thread consumer = new Thread(new Consumer(queue));
            consumer.setDaemon(false);
            consumer.start();
        }
        
    }
}

class Productor implements Runnable {
    
    private final TransferQueue<String> queue;
    
    public Productor(TransferQueue<String> queue) {
        this.queue = queue;
    }
    
    public String product() {
        return "Your lucky number is " + new Random().nextInt(100) + "director to consumer";
    }
    
    public String product2() {
        return "Your lucky number is " + new Random().nextInt(100) + "director to queue";
    }
    
    @Override
    public void run() {
        while (true) {
            try {
                if (queue.hasWaitingConsumer()) {
                    queue.transfer(product());
                    System.out.println("product:--" + queue.size());
                } else {
                    queue.put(product2());
                    System.out.println("product:--" + queue.size());
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
    
}

class Consumer implements Runnable {
    
    private final TransferQueue<String> queue;
    
    public Consumer(TransferQueue<String> queue) {
        this.queue = queue;
    }
    
    @Override
    public void run() {
        try {
            System.out.println("Consumer" + Thread.currentThread().getName() + queue.take());
            System.out.println("consumer:--" + queue.size());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 

posted on 2015-12-24 16:21  zhaojunyang  阅读(411)  评论(0)    收藏  举报

导航