由于 Thread.currentThread().运行() 而递归调用 运行 方法
Recursive calling of run method due to Thread.currentThread().run()
我是多线程的新手,正在尝试清除我的基础知识。
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 的 运行 测试 class 方法。
我无法理解 Thread.currentThread() 的用法。运行();
P.S。 - 我阅读了它的 java 文档,所以我实现了 运行nable
I am unable to understand the usage of Thread.currentThread().run();
你不应该直接调用它。从 Thread.start() 你应该使用 start()
来调用 run()
就是这样。
Causes this thread to begin execution; the Java Virtual Machine calls the run method of this thread.
The result is that two threads are running concurrently: the current thread (which returns from the call to the start method) and the other thread (which executes its run method).
It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.
你已经 运行 在 run()
所以你应该只在你能说出你为什么这样做的情况下调用它,即使那样它看起来像一个错误或者很容易混淆而且我建议您改用循环。
When i run this code, my run method of SleepExample recursively call itself after below line
您有一个调用自身的方法,所以您应该预料到会发生这种情况。 Thread
在这方面没有什么特别之处。它就像方法中的任何其他递归调用一样。
我是多线程的新手,正在尝试清除我的基础知识。
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 的 运行 测试 class 方法。
我无法理解 Thread.currentThread() 的用法。运行();
P.S。 - 我阅读了它的 java 文档,所以我实现了 运行nable
I am unable to understand the usage of Thread.currentThread().run();
你不应该直接调用它。从 Thread.start() 你应该使用 start()
来调用 run()
就是这样。
Causes this thread to begin execution; the Java Virtual Machine calls the run method of this thread.
The result is that two threads are running concurrently: the current thread (which returns from the call to the start method) and the other thread (which executes its run method).
It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.
你已经 运行 在 run()
所以你应该只在你能说出你为什么这样做的情况下调用它,即使那样它看起来像一个错误或者很容易混淆而且我建议您改用循环。
When i run this code, my run method of SleepExample recursively call itself after below line
您有一个调用自身的方法,所以您应该预料到会发生这种情况。 Thread
在这方面没有什么特别之处。它就像方法中的任何其他递归调用一样。