2012-06-10 56 views
1

当线程正在做某些特定的事情时,是否可以暂停所有其他正在运行的线程?为了使我的问题让我们假设我有以下方法暂停其他线程,而线程正在做一定的tast?

public void doActions() 
{ 
    ...... 
    ...... 
    ...... 
    if(count == 30) 
    { 
    //This is where I want to pause all other running threads 

    } 
    ...... 
    ...... 
    ...... 
} 

问候!

+0

所有线程都一样吗?您可以使用信号量结构来允许一个线程输入一个块,然后关闭信号量以阻止其他线程进入相同的代码块。或者同样使用一个同步块。 http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html –

+6

不要求解决方案,而是描述您的目标。你很可能试图以某种错误的方式解决问题。 – Lucero

+1

为什么你需要暂停其他线程 - 主要问题。基于此,我们可以给你我们的想法。 –

回答

0
  1. 您可以尝试使用CountDownLatch,这将帮助你在你要访问的资源很少的其他进程揭开序幕前的情景。

  2. 那么你也可以尝试用用旗语给到只有一个线程访问在时间

    信号灯S =新的信号量(1);

0

我发布了PauseableThread作为最近另一个问题的可能解决方案。尽管它的工作原理与你想要的稍有不同(你需要一个线程来阻止其他线程,而其他一些线程可以阻止一个线程),把它变成你正在寻找的应该很简单。

请注意,其他线程只会暂停在预定义的点上,它们不会停在原地。