并发编程:Java线程池和阻塞队列示例

原创 喜欢ヅ旅行 2024-11-21 03:33 108阅读 0赞

在Java中,线程池和阻塞队列是处理并发的两种常用工具。

  1. Java线程池(ThreadPoolExecutor)

线程池是一种资源管理方式,它维护一组工作线程,这些线程可以重复使用,而不需要每次请求一个新的线程。

示例代码:

  1. // 创建一个线程池
  2. ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(10);
  3. // 提交任务到线程池
  4. executor.execute(new Runnable() {
  5. @Override
  6. public void run() {
  7. // 这里是你的任务逻辑
  8. }
  9. }));
  1. Java阻塞队列(BlockingQueue)

阻塞队列是一种先进先出(FIFO)的多生产者、单消费者或无生产者、多个消费者的并发数据结构。

示例代码:

  1. // 创建一个固定大小为10的阻塞队列
  2. BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(10);
  3. // 生产者向队列中添加元素
  4. new Thread(() -> {
  5. for (int i = 0; i < 20; i++) {
  6. if (!queue.offer(i)) { // 如果不能立即添加,将阻塞到有空间为止
  7. System.out.println("Adding to queue is blocked due to capacity.");
  8. break;
  9. }
  10. }
  11. })}.start();
  12. // 消费者从队列中获取元素并处理它们
  13. new Thread(() -> {
  14. while (!queue.isEmpty()) { // 如果队列为空,将阻塞到有元素为止
  15. int item = queue.poll(); // 从队列中取出一个元素,并处理它
  16. if (item % 2 == 0) { // 对偶的条件
  17. System.out.println("Item " + item + " is even.");
  18. } else {
  19. System.out.println("Item " + item + " is odd.");
  20. }
  21. }
  22. })}.start();

在这个示例中,我们创建了一个固定大小为10的阻塞队列。生产者向队列中添加元素,而消费者从队列中获取并处理这些元素。如果队列已满,生产者将被阻塞;如果队列为空,消费者将被阻塞。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,108人围观)

还没有评论,来说两句吧...

相关阅读