マルチスレッドBlockingQueueでのデータの読み書き

9365 ワード

demo
マルチスレッドを使用してBlockingQueueでデータを読み書きする簡単な例です
public class BlockQueueClient {
     

    int threadNum=4;
    int clientNum=2000;

    private BlockingQueue<String> queue = new LinkedTransferQueue<String>();

        public static void main(String[] args) {
     

                BlockQueueClient blockQueueClient = new BlockQueueClient();
                blockQueueClient.producer();
                blockQueueClient.consumer();


        }

    public void producer() {
     

            ExecutorService exec = Executors.newFixedThreadPool(threadNum);

            final CountDownLatch doneSignal = new CountDownLatch(clientNum);

            if (queue.isEmpty()){
     
                    Runnable run = new Runnable() {
     

                     public void run() {
     
                        try {
     

                           queue.offer("1");
                           System.out.println("    BlockingQueue");
                           Thread.sleep(1000);
                           
                        } catch (Exception e) {
     
                            e.printStackTrace();
                        }
                                    doneSignal.countDown();//      countDown()  ,    1
                        }
                    };
                    exec.execute(run);
            }

    }

    public void consumer () {
     

            ExecutorService exec = Executors.newFixedThreadPool(3);

            for (int i = 0; i < 20; i++) {
     

             Runnable run = new Runnable() {
     
              @Override
               public void run() {
     
                  System.out.println(" BlockingQueue     :"+queue.poll());
               }
              };
              exec.execute(run);
            }
    }

}