Thread类有run方法来实现可以并行执行的业务逻辑。但是我希望在单个run方法中实现不同的业务逻辑并同时运行。如何获得此功能。
感谢
答案 0 :(得分:3)
没错。你实现(或覆盖)线程的run
- 方法来做并行的事情,但是,在调用run
与调用start
重要区别>
run
方法没有什么特别之处。调用run
的行为就像对常规方法的任何调用一样,并且在run
方法完成之前,控件不会返回调用者。神奇发生在start
。当调用start
时,控件立即返回到调用端,并生成一个以run
方法作为入口点的新线程。
因此,例如,如果要在不同的线程中同时执行两个任务,则执行以下操作:
Thread t = new Thread() {
public void run() {
doTask1();
}
};
// Spawn a new thread that doTask1. (don't call run here!)
t.start();
// Control returns immediately while thread t is busy with doTask1.
doTask2();
示例运行:
Thread t = new Thread() {
public void run() {
try {
Thread.sleep(1000);
System.out.println("Slept for 1 second.");
} catch (InterruptedException e) {
}
}
};
t.run();
System.out.println("Returned from run.");
t.start();
System.out.println("Returned from start.");
产量
(one second pause)
Slept for 1 second.
Returned from run.
Returned from start.
(one second pause)
Slept for 1 second.
答案 1 :(得分:1)
我认为最好的做法是拥有两个独立的线程。
您可以(也可能应该)编写一个实现Runnable
的新类,并在其中放置您的逻辑。
如果必须实现两个业务逻辑之间的共同活动,则可以将此类用作两个“Runnables”的基类。
每个Runnable
应该在一个单独的线程中生成。
您可以在此帖子中找到Thread vs. Runnable
的非常好的推理:
"implements Runnable" vs. "extends Thread"
答案 2 :(得分:0)
使这个run方法产生一个逻辑的新线程和另一个带有第二个逻辑的线程。