我在想如何從不同的線程調用一個類,並讓所有的調用在它自己的線程中運行?假設我有三個線程,每個線程都需要調用anotherClass.getBS(),但這些調用可能同時發生,並且沒有理由在當時執行它們。死鎖不是問題。在不同的線程中啓動一個Java類
謝謝!
我在想如何從不同的線程調用一個類,並讓所有的調用在它自己的線程中運行?假設我有三個線程,每個線程都需要調用anotherClass.getBS(),但這些調用可能同時發生,並且沒有理由在當時執行它們。死鎖不是問題。在不同的線程中啓動一個Java類
謝謝!
如果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();
}
}
如果您確信該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();
出現提問有夠麻煩的工作出了什麼一個線程沒有擴展Thread。 – 2009-05-27 13:34:06