아래의 의사 코드에서 나는 주 스레드에서 영원히 호출되는 poll()
함수를 가지고 있습니다. poll()
에 sleep()
문없이이 작업을 수행하면 다른 스레드가 1 분에 2-3 개의 항목 만 대기열에 추가됩니다. 이것은 폴링이 put()
성명을 차단한다는 것을 의미합니까?폴링이 LinkedBlockingQueue에서 다른 작업을 차단합니까?
이 문제를 어떻게 해결할 수 있습니까?
public class Test extends Thread{
private LinkedBlockingQueue<Object> queue = null;
Test(){
queue = new LinkedBlockingQueue<Object>(10);
}
public void run(){
// Do stuff, get incoming object from network
queue.put(o);
}
public Object poll(){
Object o = queue.poll();
sleep(1000);
return o;
}
}
+1 - 좋은 전화 'take()' –
예, 저의 첫 번째 아이디어였습니다. 하지만 take()를 사용하면 대기열이 비어 있으면 내 mainthread가 차단됩니다. 나는 그 스레드에서 다른 것들도하고 싶다. – fibera
@fibera 그런 기능에 대해'public E poll (long timeout, TimeUnit unit) throws InterruptedException'을 살펴보십시오. 클리너와 더 정확한 다음 '잠'. –