2009-05-27 38 views
2

我在想如何從不同的線程調用一個類,並讓所有的調用在它自己的線程中運行?假設我有三個線程,每個線程都需要調用anotherClass.getBS(),但這些調用可能同時發生,並且沒有理由在當時執行它們。死鎖不是問題。在不同的線程中啓動一個Java類

謝謝!

回答

7

如果anotherClass.getBS()確實是線程安全的,則可以從三個線程中的每一個線程調用它。它會在您調用它的線程中運行。

這是一個小例子。下面的代碼產生這樣的輸出:

$ javac Bar.java 
$ java Bar 
Thread ID 9 running 
Thread ID 10 running 
Thread ID 8 running 
Doing something on thread 9 
Doing something on thread 10 
Doing something on thread 8 
Thread ID 9 running 
Doing something on thread 9 
Thread ID 8 running 
Doing something on thread 8 
Thread ID 10 running 
Doing something on thread 10 

下面的代碼:

public class Bar 
{ 

    static private final class MyOtherClass 
    { 
    public void doSomething() 
    { 
     System.out.println("Doing something on thread "+Thread.currentThread().getId()); 
    } 
    } 

    static private MyOtherClass myOtherClass=new MyOtherClass(); 

    static private final class MyThreadClass implements Runnable 
    { 
    public void run() 
    { 
     while (true) 
     { 
     try 
     { 
      Thread.sleep(1000); 
     } 
     catch (InterruptedException ie) 
     { 
      System.err.println("Interrupted"); 
      return; 
     } 
     System.out.println("Thread ID "+Thread.currentThread().getId()+" running"); 
     myOtherClass.doSomething(); 
     } 
    } 
    } 

    static public void main(String[] args) 
    { 
    Thread t1=new Thread(new MyThreadClass()); 
    Thread t2=new Thread(new MyThreadClass()); 
    Thread t3=new Thread(new MyThreadClass()); 
    t1.start(); 
    t2.start(); 
    t3.start(); 
    } 

} 
2

如果您確信該getBS()方法沒有任何併發​​問題只需要調用該方法正常。

如果方法是static只是做:

AnotherClass.getBS(); 

其他

傳遞給每個線程的anotherClass OBJ參考:

class MyThread extends Thread { 
    private AnotherClass anotherClass; 

    MyThread(AnotherClass anotherClass) { 
     this.anotherClass= anotherClass; 
    } 

    public void run() { 
     anotherClass.getBS(); 
    } 
} 


MyThread p = new MyThread(anotherClass); 
p.start(); 
+0

出現提問有夠麻煩的工作出了什麼一個線程沒有擴展Thread。 – 2009-05-27 13:34:06

相關問題