Java LinkedBlockingQueue put()方法示例

Java LinkedBlockingQueue put()方法示例

LinkedBlockingQueue是Java中线程安全的阻塞队列。在LinkedBlockingQueue中,put()方法是一个能够阻塞当前线程,直到队列中有空闲的空间可以添加元素的方法。本文将为您介绍如何使用LinkedBlockingQueue的put()方法。

语法

put()方法的语法如下所示:

public void put(E e) throws InterruptedException

put方法将指定的元素插入此队列中,如果队列已满,则阻塞等待可用的空间。实际上,此方法等效于add方法,只是当队列已满时它将永远等待,而add方法则抛出IllegalStateException。

示例

下面是一个使用put()方法的示例程序:

import java.util.concurrent.LinkedBlockingQueue;

public class LinkedBlockingQueueExample {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<>(5);

        Producer producer = new Producer(queue);
        Consumer consumer = new Consumer(queue);

        new Thread(producer).start();
        new Thread(consumer).start();
    }
}

class Producer implements Runnable {
    private LinkedBlockingQueue<String> queue;

    Producer(LinkedBlockingQueue<String> queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        try {
            for (int i = 0; i < 10; i++) {
                String element = "element " + i;
                queue.put(element);
                System.out.println("Produced " + element);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

class Consumer implements Runnable {
    private LinkedBlockingQueue<String> queue;

    Consumer(LinkedBlockingQueue<String> queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        try {
            while (true) {
                String element = queue.take();
                System.out.println("Consumed " + element);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

在本示例程序中,我们创建了一个大小为5的LinkedBlockingQueue。我们使用两个线程,一个线程是Producer,往队列中添加元素;另一个线程是Consumer,从队列中取出元素。

在Producer线程的run()方法中,我们往队列中添加了10个元素。如果队列已满,put方法会阻塞直到队列中有空闲的空间可以添加元素。在Consumer线程的run方法中,我们从队列中取出元素。如果队列为空,take方法会等待直到队列中有元素。

结论

通过本文的介绍,我们了解了LinkedBlockingQueue的put()方法的用法,它能够阻塞当前线程,直到队列中有空闲的空间可以添加元素。在多线程的编程中,我们可以使用LinkedBlockingQueue的put()方法来实现线程间的同步和协作。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程