2013-10-24 224 views
0

我目前正在編寫一個Java應用程序,需要對Twitter API進行大量的調用。因此,我不得不擔心超出限制。我發現我可以每14分鐘撥打180個電話,然後必須等待一段時間,才能再次啓動對該API的呼叫(該號碼在應用程序中返回)。所以,當通話達到一定數量時,我的睡眠線就緒。我的意圖是讓線程在sleep()結束時自動停止。這是否工作或我不得不擔心CPU調度和類似的事情!?睡眠後繼續線程

也許我不完全瞭解睡眠應該如何工作。任何幫助將不勝感激看到我在做什麼是對的。謝謝!

下面是隻是一對夫婦的僞代碼行:

for (int i = 0; i < arr.length; i++) 
{ 
    if (calls are a certain number) 
    { 
     Thread.sleep(840*1000); 
     continue; 
    } 
     //CALL TO METHOD THAT REQUESTS INFORMATION FROM TWITTER API 
} 

回答

0

使用的CyclicBarrier類。從的CyclicBarrier的Javadoc

例子:

class Solver { 
    final int N; 
    final float[][] data; 
    final CyclicBarrier barrier; 

    class Worker implements Runnable { 
    int myRow; 
    Worker(int row) { myRow = row; } 
    public void run() { 
     while (!done()) { 
     processRow(myRow); 

     try { 
      barrier.await(); 
     } catch (InterruptedException ex) { 
      return; 
     } catch (BrokenBarrierException ex) { 
      return; 
     } 
     } 
    } 
    } 

    public Solver(float[][] matrix) { 
    data = matrix; 
    N = matrix.length; 
    barrier = new CyclicBarrier(N, 
           new Runnable() { 
            public void run() { 
            mergeRows(...); 
            } 
           }); 
    for (int i = 0; i < N; ++i) 
     new Thread(new Worker(i)).start(); 

    waitUntilDone(); 
    } 
} 

只能使用兩個線程來解決這個任務,用簡單的鎖(從java.util.concurrent中太)。 CyclicBarrier只是提供更多可擴展的解決方案。

0

IIRC,在Java你可以通過超時的object.wait()。這不是你想要的嗎?如果你想改變另一個線程的超時時間,改變一些'waitValue'變量和notify()。線程將立即運行,然後再次用新的超時值等待。沒有明確的睡眠要求。