java - 取前如何查看BlockingQueue头元素?

标签 java multithreading producer-consumer blockingqueue

我想在接受之前检查一个头元素但是加注
java.lang.NullPointerException 偷看时,

使用java阻塞队列

 BlockingQueue sharedQueue = new LinkedBlockingQueue()

这是我的代码,有什么想法吗?

while(true){
    try {
        if(!sharedQueue.isEmpty()){
            char  ch = (char)sharedQueue.peek();
            if(Character.isDigit(ch)){
                digitTextField.setText(digitTextField.getText()+sharedQueue.take());
            }
        }
    } catch (InterruptedException ex) {
        Logger.getLogger(Form.class.getName()).log(Level.SEVERE, null, ex);
    }
}

最佳答案

这是因为您正在转换为 char不允许空值。另外,不要做 sharedQueue.isEmpty()其次是 peek - 这就是众所周知的“先检查后行动”,这是众所周知的种族原因。

你应该定义sharedQueue作为BlockingQueue<Character>然后使用

if ((Character c = sharedQueue.poll()) != null)

关于java - 取前如何查看BlockingQueue头元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16147995/

相关文章:

java - 从共享首选项中检索数据

C++11 - 可以等待几个不同事件的线程?

c - 下面的代码可能会出现什么问题?

java - 线程池,worker既是生产者又是消费者

java - 向 ThreadPoolExecutor 的 BlockingQueue 添加任务是否可取?

c - 多个生产者和消费者共享一个资源——只有一个线程在运行

java - 使用Java批量删除Rally测试用例

Java:为什么不覆盖 "this( )"?

java - Java Web Start 应用程序故障排除和访问日志文件

multithreading - InvokeOnMainThread()不一定要在主线程上调用-错误或功能?