我想在我的propram上睡一个线程,但它让两个线程睡觉,所以我的问题是什么,请帮帮忙?
public class TestWait extends Thread{
static TestWait t1;
static TestWait t2;
public void run()
{
while(true)
{
try {
t1.sleep(10000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public static void main(String [] args) throws InterruptedException
{
t1 = new TestWait();
t2 = new TestWait();
t1.start();
t2.start();
t1.setName("t1");
t2.setName("t2");
}
}
答案 0 :(得分:2)
Thread.sleep
是static
方法,它使调用它的线程休眠毫秒数。你的代码
t1.sleep(10000);
实际上与
相同Thread.sleep(10000);
答案 1 :(得分:1)
该方法将"当前正在执行的线程置于休眠状态"。它不应该以这种方式对实例进行调用。 http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#sleep%28long%29
答案 2 :(得分:0)
我确定您在t1.sleep()
中有警告:
Thread.sleep(int)
暂停当前威胁,因此当两个对象共享run()
实现时,它们都会暂停。您可以更改它并执行以下操作:
public class TestWait extends Thread{
static TestWait t1;
static TestWait t2;
private boolean flag
public TestWait(boolean wait) {
this.flag=wait;
}
public void run() {
while(true) {
try {
if (flag) {
Thread.sleep(10000);
}
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public static void main(String [] args) throws InterruptedException {
t1 = new TestWait(true);
t2 = new TestWait(false);
t1.start();
t2.start();
t1.setName("t1");
t2.setName("t2");
}
}
答案 3 :(得分:0)
在Java中,您可以使用对类实例的引用来调用静态方法,即使此引用是null
...如果类s
中有静态方法A
,然后所有这些工作:
final A a = new A();
final A nullA = null;
A.s(); // via class
a.s(); // via non null reference
nullA.s(); // via null reference
为了避免混淆,请不要使用此方法,而是使用TimeUnit
代替:
TimeUnit.SECONDS.sleep(10);