我刚开始使用Java的多线程概念。我写了一个小的Java程序,但是,我真的不能理解它的行为。Java多线程thread.sleep()
public class Mythread implements Runnable{
@Override
public void run() {
System.out.println("mythread: ");
Thread t=new Thread(this,"thread1");
for(int i=1;i<5;i++)
{
System.out.println("in for of myThread");
try {
t.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class ThreadTest {
public static void main(String[] args) {
System.out.println("in main thread");
Mythread mythread=new Mythread();
Thread thread=new Thread(mythread,"thread0");
thread.start();
for(int i=1;i<5;i++)
{
System.out.println("main class: "+i);
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
现在,当我执行上述程序时,我看到当thread1进入休眠状态时thread0也进入休眠状态。
t.sleep(1000);
是thread1
和thread0
相同的线程? 另外,我还没有开始thread1
我的代码中的任何地方,那么为什么线程进入睡眠?
我只是一个初学者多线程,并参考Java完整的参考书。
[Thread.sleep](http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#sleep-long-)是一种静态方法。无论你在哪里调用它,它都可以让任何线程调用它。这是Java的怪癖,你可以在非静态的上下文中调用它,而不会造成编译错误。 – Powerlord