Я возился с синхронизацией в Java, и это все еще не работает для меня.
У меня есть два объекта Runnable, которые используются для создания отдельных потоков, и у каждого объекта есть дескриптор общего ArrayList и общего объекта (для использования в синхронизированных). Первый Runnable всегда читает одну переменную экземпляра для всех Объектов в списке массивов, а второй Runnable постоянно обновляет переменные экземпляра для всех Объектов в списке массивов.
Как я сейчас его настроил, оба объекта Runnable содержат указатель на объект, который я собирался использовать в качестве блокировки.
Работоспособен 1:
public void run() {
if (syncLock == null)
return;
synchronized (syncLock) {
try {
syncLock.wait();
} catch (InterruptedException e) {
}
for (int i = 0; i < list.size(); i++) {
drawItem(list.get(i));
}
syncLock.notify();
}
}
Runnable 2:
public void run() {
if (syncLock == null)
return;
synchronized (syncLock) {
try {
syncLock.wait();
} catch (InterruptedException e) {
}
for (int i = 0; i < list.size(); i++) {
updateItem(list.get(i));
}
syncLock.notify();
}
}
Технически, первый Runnable всегда рисует объекты на экране, а второй вычисляет новую позицию элементов на основе изменения во времени.
Что-то, чего мне не хватает?