2013-10-24 273 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()。线程将立即运行,然后再次用新的超时值等待。没有明确的睡眠要求。