java Thread类run()方法

时间:2010-06-14 07:29:26

标签: java multithreading

Thread类有run方法来实现可以并行执行的业务逻辑。但是我希望在单个run方法中实现不同的业务逻辑并同时运行。如何获得此功能。

感谢

3 个答案:

答案 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方法产生一个逻辑的新线程和另一个带有第二个逻辑的线程。