У меня есть класс, который расширяет поток. Этот поток, когда работает, тратит большую часть своего времени на сон, он выполнит проверку, если true выполнит простое действие, затем будет спать в течение 1/2 секунды и повторить.
У класса также есть открытый метод, который вызывается другими потоками. Если это называется, я хочу, чтобы поток спал дольше, если он уже спал, или просто спал немедленно, если это не так. Я попытался использовать 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