wait(), notify(), notifyAll(), Thread.run(), synhronized 등과 같은 원시 자바 동시 구조를 사용하는 프로젝트에서 작업 중입니다. 내 프로젝트에는 큐로부터 오브젝트를 주기적으로 취득하는 복수의 thread (Thread 클래스의 확장 기능) 따라서 TimerTask 클래스가있는 Timer 클래스를 사용합니다.주기적으로 여러 스레드에 알리기
내 문제는 다른 스레드를 주기적으로 깨우는 방법을 얻을 수 없다는 것입니다. 내 메인 클래스는 이러한 스레드 또는 타이머 클래스가 아닙니다. 따라서 나는 다른 클래스에서 그들의 실행을 호출합니다. 이 스레드를 대기시키고 100 밀리 초당 한 번만 알리는 방법을 알아낼 수 없었습니다.
public class Controller extends Timer{
int counter;
TimerTask task;
final Controller c = this;
public class PeriodicTime extends TimerTask {
@Override
public void run() {
if(counter > 0) {
//do some stuff to wake up threads
}
counter++;
}
}
Controller() {
super();
this.task = new PeriodicTime();
counter = 0;
this.schedule(task, 300, 100);
}
}
그리고 내 스레드 클래스는 다음과 같습니다 : 내 타이머 클래스는 지금
public class Element extends Thread {
public void run() {
// do something to get an object from another class (a queue)
}
}
, 내가 스레드 클래스에 출시 정기적으로 확인하는 방법을 정말 혼란 스러워요. 나는 wait()/notify()를 사용할 지 여부를 알 수 없었다.
앞서 말했듯이, 나는 여러 개의 Element 클래스를 생성 할 것이다. 그들은 동기화 작업을합니다. 그렇다면 어떻게해야합니까?
나는 당신이 선택의 여지가 있다면 당신이 정말로 그것을 이런 식으로하지 않을 것 같은이, 숙제입니다 가정합니다. ExecutorService는 훨씬 단순하게 원하는 것을 수행합니다. –
대기/알림을 수행하려면 다른 개체가 알림을 보내는 동안 기다리는 공통 개체에 액세스해야합니다. 당신은'대기열'을 어떻게 언급 했습니까? –
예 숙제이므로 수행 방법을 선택할 수 없습니다. 내 대기열에는 작업이 동기화 된 "put"및 "get"메소드가 있습니다. 개체 수에 따라 이러한 메서드에 "wait"및 "notify"를 넣습니다. – anyName