클라이언트에는 일정 간격으로 알람을 예약하는 Scheduler
클래스가 제공됩니다. 이렇게하려면 우선 순위 대기열에 알람을 추가하는 클래스에 setAlarm
메서드가 있고 Timer
프로 시저가 대기열의 맨 위에있는 프로세스를 깨우고 처리 할 시간을 알 수 있도록 notify()
을 수행합니다.어떻게 여러 스레드가 인스턴스에 대한 참조를 유지할 수 있습니까?
다음은 기본 구현 - 이제
class Scheduler {
synchronized public void setAlarm(Date date) {
notify();
}
synchronized private void alarmTimer() {
while (true) {
wait();
System.out.println("Alarm Triggered");
}
}
이 알림을 수신하거나 시간이 다 될 때까지 때까지이 기다리고있을 것입니다 때문에 내가 다른 스레드에서 실행하는 Timer
절차를 필요의 예입니다. 그러나 클라이언트는 두 개의 스레드가 있음을 인식하지 못합니다. 고객의 관점에서라면 schedulerInstance.setAlarm(myDate)
을 처리 할 것이므로 처리해야합니다.
따라서 Scheduler
은 alarmTimer()
에 대해 별도의 스레드를 만들어야합니다. this
객체를 계속 참조하면서이 새 스레드에서 alarmTimer를 호출하는 방법은 무엇입니까? wait()
과 notify()
이 작동하도록 원래의 Scheduler
인스턴스에 대한 참조를 유지하기 위해 여러 스레드가 원하는 상황을 처리하는 올바른 방법은 무엇입니까?
Java 5 이후로 ['ScheduledExecutorService'] (https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html)가 있습니다. 직업에 사용. – alfasin