嗨,我正在学习和玩java中的线程。我在一本书中看到Thread对象和Running Thread不是同一件事。即使线程完成它的运行方法,运行线程也会进入死亡状态,我甚至用isAlive()方法检查它。我想知道,如果两者都不同,那么下面的代码不能按照我的理解工作。Java线程对象vs正在运行线程
public class Main {
public static void main(String[] args) throws ParseException {
Student s = new Student();
Thread t = new Thread(s);
t.start();
t.run();
t.run();
t.run();
t.run();
t.run();
}
}
class Student implements Runnable {
public void run() {
try {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
它只显示这个输出。 主要 线程0 主要 或本 线程0 主要
从这个结果我明白线程之后完成它的运行方式。正在运行的线程进入死态,并调用Thread obj方法不工作,但我无法理解背后的原因,因为Thread对象是技能参考,Thread类的其他方法又如何。 like yield()? start()?
这里是另一种情形了清晰的认识我的话
public class Main {
public static void main(String[] args) throws ParseException {
Student s = new Student();
Thread t = new Thread(s);
t.start();
if (!t.isAlive()) {
t.start();
}
}
}
class Student implements Runnable {
public void run() {
try {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
文件说,如果我们调用start方法对线程t对象,然后它会抛出java.lang.IllegalThreadStateException。但上面的代码工作正常。 我很困惑Thread类的哪些方法依赖于运行线程和线程对象。我希望你能理解这个问题。 在此先感谢?
我知道大部分时间它不会发生,但为什么运行和其他方法仍然不起作用我的第一个代码 –
,因为't'已经在第一次调用't'时使用了'Runnable s' 。开始()'。 –
“如果此线程是使用单独的Runnable运行对象构造的,那么将调用该Runnable对象的运行方法; *否则,此方法不执行任何操作并返回。*”--https://docs.oracle.com/javase/7 /docs/api/java/lang/Thread.html#run%28%29 –