java - LinkedBlockingQueue 阻塞问题
伊谢尔伦
伊谢尔伦 2017-04-18 09:44:43
0
4
1059

当用LinkedBlockingQueue的take()方法获取队列信息时

一旦队列为空,则进入阻塞状态

再往队列里put()元素,take()方法会自动获取新加入元素,还是始终保持阻塞状态?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

membalas semua(4)
洪涛

Pemerolehan automatik, tiada sekatan

伊谢尔伦

Jika masih disekat, apa guna kelas ini?

巴扎黑

Adalah disyorkan untuk melihat kod sumber dan anda akan tahu, ia sangat bermanfaat

伊谢尔伦

@wxmimperio Jawapan yang anda pakai adalah salah. ConcurrentLinkedQueue tidak menyekat, LinkedBlockingQueue menyekat. Saya akan memberikan anda kod masing-masing: seperti berikut:

import java.util.concurrent.LinkedBlockingQueue;
public class TestLinkedBlockingQueue {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<String>();
        try {
            queue.put("a");
            queue.put("b");
            System.out.println(queue.take());
            System.out.println(queue.take());
            System.out.println(queue.take());
            queue.put("c");
            System.out.println(queue.take());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
//输出结果:
//a
//b

Tetapi lihat pada ConcurrentLinkedQueue yang tidak menyekat

import java.util.concurrent.ConcurrentLinkedQueue;
public class TestConcurrentLinkedQueue {
    public static void main(String[] args) {
        ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<String>();
        queue.add("a");
        queue.add("b");
        System.out.println(queue.peek());
        queue.remove();
        System.out.println(queue.peek());
        queue.remove();
        System.out.println(queue.peek());
        queue.remove();
        queue.add("c");
        System.out.println(queue.peek());
        queue.remove();
    }
}
//a
//b
//null
//Exception in thread "main" java.util.NoSuchElementException
//    at java.util.AbstractQueue.remove(AbstractQueue.java:117)
//    at TestConcurrentLinkedQueue.main(TestConcurrentLinkedQueue.java:14)
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan