我有一个继承了Thread的类。当这个线程运行时,大部分时间都在睡眠,它会执行一次检查,如果为真则执行简单操作,然后睡眠半秒钟并重复执行。
该类还有一个公共方法,被其他线程调用。如果调用此方法,则希望线程在已经睡眠的情况下延长睡眠时间或者立即进入睡眠状态(如果尚未睡眠)。我试图使用this.sleep,但似乎仍然使当前线程进入睡眠状态,并且表示该方法sleep是静态的并且应该使用静态访问。
该程序展示了我的问题,当调用CauseSleep时,我希望它停止打印数字,直到该休眠完成。
我得到的输出是:
该类还有一个公共方法,被其他线程调用。如果调用此方法,则希望线程在已经睡眠的情况下延长睡眠时间或者立即进入睡眠状态(如果尚未睡眠)。我试图使用this.sleep,但似乎仍然使当前线程进入睡眠状态,并且表示该方法sleep是静态的并且应该使用静态访问。
该程序展示了我的问题,当调用CauseSleep时,我希望它停止打印数字,直到该休眠完成。
public class Sleeper {
public static void main(String[] args) {
new Sleeper();
}
public Sleeper() {
System.out.println("Creating T");
T t = new T();
System.out.println("Causing sleep");
t.CauseSleep();
System.out.println("Sleep caused");
}
public class T extends Thread {
public T() {
this.start();
}
public void run() {
for (int i = 0; i < 30; i++) {
System.out.println("T Thread: " + i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
public void CauseSleep() {
try {
this.sleep(2000);
} catch (InterruptedException e) {
}
}
}
}
我得到的输出是:
Creating T
Causing sleep
T Thread: 0
T Thread: 1
T Thread: 2
T Thread: 3
T Thread: 4
T Thread: 5
T Thread: 6
T Thread: 7
T Thread: 8
T Thread: 9
T Thread: 10
T Thread: 11
T Thread: 12
T Thread: 13
T Thread: 14
T Thread: 15
T Thread: 16
T Thread: 17
T Thread: 18
Sleep caused
T Thread: 19
T Thread: 20
T Thread: 21
T Thread: 22
T Thread: 23
T Thread: 24
T Thread: 25
T Thread: 26
T Thread: 27
T Thread: 28
T Thread: 29