开发者社区> 问答> 正文

Java中的 BlockingQueue是什么?

一般在什么使用使用呢?

展开
收起
YDYK 2020-04-24 16:20:16 403 0
1 条回答
写回答
取消 提交回答
  • java.util.concurrent.BlockingQueue是Qu​​eue的子接口,它支持诸如在插入新值之前等待空间可用性或在从队列中检索元素之前等待队列变为非空之类的操作。考虑以下示例。

    import java.util.Random;  
    import java.util.concurrent.ArrayBlockingQueue;  
    import java.util.concurrent.BlockingQueue;  
      
    public class TestThread {  
      
       public static void main(final String[] arguments) throws InterruptedException {  
          BlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(10);  
      
          Insert i = new Insert(queue);  
          Retrieve r = new Retrieve(queue);  
      
          new Thread(i).start();  
          new Thread(r).start();  
      
          Thread.sleep(2000);  
       }    
      
      
       static class Insert implements Runnable {  
          private BlockingQueue<Integer> queue;  
      
          public Insert(BlockingQueue queue) {  
             this.queue = queue;  
          }  
      
          @Override  
          public void run() {  
             Random random = new Random();  
      
             try {  
                int result = random.nextInt(200);  
                Thread.sleep(1000);  
                queue.put(result);  
                System.out.println("Added: " + result);  
                  
                result = random.nextInt(10);  
                Thread.sleep(1000);  
                queue.put(result);  
                System.out.println("Added: " + result);  
                  
                result = random.nextInt(50);  
                Thread.sleep(1000);  
                queue.put(result);  
                System.out.println("Added: " + result);  
             } catch (InterruptedException e) {  
                e.printStackTrace();  
             }  
          }      
       }  
      
       static class Retrieve implements Runnable {  
          private BlockingQueue<Integer> queue;  
      
          public Retrieve(BlockingQueue queue) {  
             this.queue = queue;  
          }  
            
          @Override  
          public void run() {  
               
             try {  
                System.out.println("Removed: " + queue.take());  
                System.out.println("Removed: " + queue.take());  
                System.out.println("Removed: " + queue.take());  
             } catch (InterruptedException e) {  
                e.printStackTrace();  
             }  
          }  
       }  
    }  
    
    2020-04-24 16:20:48
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载