由Thread.currentThread()递归调用run方法.run()

时间:2016-04-24 16:45:16

标签: java multithreading runnable

我是多线程的新手,并试图清除我的基础知识。

public class SleepExample extends Thread {

private int counter = 0;

@Override
public void run() {

    try {
        counter++;
        System.out.println("Value of counter "+counter);
        System.out.println("Thread going in sleep "+Thread.currentThread().getName());
        Thread.currentThread().run();
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("Thread out of sleep "+Thread.currentThread().getName());
}

public static void main(String[] args) {
    new SleepExample().start();
    new SleepExample().start();
    Test test = new  Test();
    Thread t = new Thread(test);
    t.start();
}
}

//another class implementing runnable

public class Test implements Runnable {

@Override
public void run() {
    System.out.println("In Test runnable method");

}

}

当我运行此代码时,我的SleepExample运行方法在行

之后递归调用自身
Thread.currentThread().run();

属于SleepExample(Thread -0,Thread -1)和  它用于运行线程t的Test类的方法。

我无法理解Thread.currentThread()。run();

的用法

P.S。 - 我读了它的java doc,所以我实现了一个runnable

1 个答案:

答案 0 :(得分:1)

  

我无法理解Thread.currentThread()。run();

的用法

你不应该直接打电话。来自Thread.start()您应该使用start()来呼叫run(),就是这样。

  

使该线程开始执行; Java虚拟机调用此线程的运行方法。

     

结果是两个线程同时运行:当前线程(从调用start方法返回)和另一个线程(执行其run方法)。

     

不止一次启动线程永远不合法。特别是,一旦完成执行,线程可能无法重新启动。

你已经在run()中运行所以你应该只在你说出你为什么这么做的时候打电话给它,即使这样它看起来像一个bug或者很容易混淆我建议你使用一个循环代替。

  

当我运行此代码时,我的SleepExample运行方法在行

之后递归调用自身

你有一个调用自己的方法,所以你应该期待这种情况发生。在这方面Thread没有什么特别之处。它就像方法中的任何其他递归调用一样。