2015-10-30 44 views
0

我有一個方法,我想通過調用方法來運行線程。但我可以運行一個線程。但現在我的問題是我想我的線程運行,即使我多次調用該方法。例如,我調用一個調用線程方法的方法,它開始運行。現在我再次調用方法,這不應該導致線程首先運行,而不會影響以前運行的線程。我想過使用Thread.isAlive();.但仍然卡住。如何讓線程運行沒有任何中斷

類MyRunnableThread實現Runnable {

public static int myCount = 0; 
    public MyRunnableThread(){ 

    } 
    public void run() { 
     while(MyRunnableThread.myCount <= 10){ 
      try{ 
       System.out.println("Expl Thread: "+(++MyRunnableThread.myCount)); 
       Thread.sleep(100); 
      } catch (InterruptedException iex) { 
       System.out.println("Exception in thread: "+iex.getMessage()); 
      } 
     } 
    } 
} 
public class RunMyThread { 
    public void call(){ 
     System.out.println("Starting Main Thread..."); 
     MyRunnableThread mrt = new MyRunnableThread(); 
     Thread t = new Thread(mrt); 
     t.start(); 
     while(MyRunnableThread.myCount <= 10){ 
      try{ 
       System.out.println("Main Thread: "+(++MyRunnableThread.myCount)); 
       Thread.sleep(100); 
      } catch (InterruptedException iex){ 
       System.out.println("Exception in main thread: "+iex.getMessage()); 
      } 
     } 
     System.out.println("End of Main Thread..."); 
    } 
} 



public void CallThreadCaller() 
{ 
    call(); 
} 

現在我打電話是()的調用方法再次 它應該不會影響之前的線程運行。它應該檢查它的運行或它應該啓動線程。但是,如果我們啓動一個新的實例,如何檢查一個線程是否已經在運行。

+1

你有沒有試過這方面的東西。你能向我們展示你試過的示例代碼嗎? –

+0

爲每個線程創建一個您需要的類的實例,讓每個線程與它自己的類 – MadProgrammer

回答

2

你應該做的是如果你使用的Java 1.7是使用ExecutorServiceExecutors.newSingleThreadExecutor()

這隻有一個帶有無界隊列的活動線程。所以你的方法調用的後續調用將排隊。

private ExecutorService ex = Executors.newSingleThreadExecutor(); 

public void yourMethod() { 
    ex.submit(new Runnable() { 
     public void run() { 
      // Your logic 
     } 
    }); 
} 

現在,即使你調用第一個線程多次要完成之前,後續線程可以啓動。

+0

的實例進行交互,但是這個隊列將成爲問題。 ? – BelieveToLive

+0

如何檢查一個線程是否已經運行 – BelieveToLive

+0

您可以檢查線程是否運行復雜的邏輯,但我認爲這個解決方案能夠優雅地解決您的問題。 – shazin

相關問題