我有以下代码,它在线程中执行。代码说明:
1.来自polls
的每个主题Media
LinkedBlockingDeque
对象并对其执行操作。
2.当LinkedBlockingDeque
被清空时,单个帖子必须fetchMoreMedia
。
3.这一直持续到另一个线程将DONE
变量设置为true
。
static final private LinkedBlockingDeque<Media> lbDeque
= new LinkedBlockingDeque<Media>(LIMIT);
static final private int LIMIT = 100;
public void run(){
Media media = null;
while (!DONE) {
if ( (media = lbDeque.poll()) != null ) {
// do stuff
} else {
synchronized(lbDeque){
if( lbDeque.size() == 0 ){
fetchMoreMedia(LIMIT);
}
}
}
}
}
// LIMIT is used as a param for readability reasons
private void fetchMoreMedia(int LIMIT){
// this method populates the LinkedBlockingDeque 'lbDeque'
// inserting LIMIT values
for(int i=0; i < LIMIT; i++)
{
lbDeque.add(new MyObject());
}
}
我当前的代码工作正常,因为它确保每次清空时只有一个线程更新LinkedBlockingDeque
,方法是检查synchronized
块中的大小。但我觉得这样做效率不高或是最好的方法。
请您指出更好的方式/方式(不需要检查LinkedBlockingDeque
的大小)以确保在这种情况下线程限制?或以我的思维方式犯错误?
谢谢。