У меня есть Java-апплет. Класс внутри этого апплета создает поток для выполнения некоторой работы, ожидая 30 секунд для завершения этой работы, если его не завершено за 30 секунд, он устанавливает логическое значение для остановки потока. Ожидание и изменение Boolean в синхронном блоке Является ли это необходимо, учитывая не существует никакой другой поток работает в стороне от этих 2.Требуется синхронизация
System.out.println("Begin Start Session");
_sessionThread = new SessionThread();
_sessionThread.start();
synchronized (_sessionThread)
{
_sessionThread.wait(30000);
_sessionThread._stopStartSession = true;
}
Почему я не мог просто сделать это вместо этого.
System.out.println("Begin Start Session");
_sessionThread = new SessionThread();
_sessionThread.start();
_sessionThread.wait(30000);
_sessionThread._stopStartSession = true;
SessionThread run method. Вызывает метод JNI для вызова DLL, чтобы открыть окно программы.
public void run()
{
try
{
startExtraSession();
}
catch (Throwable t)
{
t.printStackTrace();
}
notify();
}
private native void openSessionWindow(String session_file);
private void startExtraSession()
{
final String method_name = "startExtraSession";
String title = _sessionInfo._title;
long hwnd = 0;
openSessionWindow(_sessionInfo._configFile);
try
{
//Look for a window with the predefined title name...
while ((hwnd = nativeFindWindow(title)) == 0 && !_stopStartSession)
{
Thread.sleep(500);
}
}
catch(Throwable t)
{
t.printStackTrace();
}
}
1. Действительно ли синхронизирован?
2. Есть ли лучший способ сделать это, помимо использования потоков?
Если поток принадлежит классу, с которого он звонит в синхронный раздел, не соответствует ли это требованиям? Прошло много времени с моих дней Java, поэтому, пожалуйста, просветите меня. –
Если вы находитесь вне любого синхронизированного метода или любого синхронизированного блока, вы не являетесь владельцем какого-либо монитора и, следовательно, не можете называть 'wait'. Позвольте мне отредактировать мой ответ, чтобы быть более четким при сборе блокировки/монитора. – Romain