如何更有效地实现线程限制?

时间:2014-11-18 11:35:24

标签: java multithreading synchronization

我有以下代码,它在线程中执行。代码说明:

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的大小)以确保在这种情况下线程限制?或以我的思维方式犯错误?

谢谢。

0 个答案:

没有答案