Я думаю, что вы ищете ThreadPool. Java 5 и выше поставляется с ThreadPoolExecutor . Я бы посоветовал вам использовать то, что поставляется с Java, вместо того, чтобы писать свои собственные, чтобы вы могли сэкономить много времени и средств.
Конечно, если вам абсолютно необходимо сделать это так, как вы описали (эй, иногда деловые требования усложняют нашу жизнь), тогда используйте wait () и notify (), как предложил Джон. Я бы не использовал sleep () в этом случае, потому что вы должны указать указанное время ожидания, и вы никогда не будете знать, когда поступит следующий запрос. Наличие потока, который продолжает просыпаться, а затем возвращается в режим сна, кажется мне немного расточительным из цикла ЦП ,
Вот хороший учебник о ThreadPoolExecutor.
EDIT:
Вот пример кода:
public class MyUtils {
private static UIUpdater worker = null;
private static ExecutorService exeSrv = Executors.newFixedThreadPool(1);
public static void handleStateChange(){
if(tabSwitcherThread == null || !tabSwitcherThread.isAlive()){
worker = new UIUpdater();
}
//this call does not block
exeSrv.submit(worker, new Object());
}
private static class UIUpdater implements Runnable{
@Override
public void run() {
//do server request and update ui.
}
}
}