我想知道我对下面的代码示例是正确的。 我在java中有两个线程。 Thread_W and Thread_R
两者都可以访问的Queue<String> queue
。Java多线程写入和读取
在Thread_W中有一个名为put的方法。
private void put(String email){
queue.offer(email);
}
并且在Thread_R中有一个名为get AND的方法,它在Thread_R启动时被调用一次。
public void get(){
while(true)
{
if(!queue.isEmpty())
{
String to = queue.poll();
//thread will consume some time here ...may be 5-10 seconds.
}
}
}
所以在Thread_W方法put
将称为更有效地通过在Thread_W.may甲其他方法是在while循环。
如果我在我的Java项目中使用此代码,Thread_R会丢失放入队列的任何电子邮件吗?
P.S.我真的需要一个缓冲区
看看java的并发性。你需要一个线程安全的队列。 – vikingsteve 2015-02-10 19:25:48
为什么阅读主题“失去任何电子邮件”? – Zhedar 2015-02-10 19:25:56
您应该使用锁定来防止同时发生读写。它的要点是写入过程正在写入,所以它锁定队列。读取进程尝试访问队列,但必须等待写入完成.. – 2015-02-10 19:26:26