Является ли приведенный ниже код законным для синхронизации myIntArray?
Помешает ли он трем нижним методам изменить myIntArray не по порядку?
Я хочу, чтобы все происходило в порядке отложенный метод1, отложенный метод2, метод3 и чтобы ни один из них не испортился запустившись до того, как предыдущий завершит свои изменения в myIntArray.
Нужны ли для трех нижних объявлений метода ключевые слова synchronized?
Должны ли три нижних метода содержать блоки synchronized(myIntArray)?
Должен ли мой синхронизированный block находиться вокруг Runnable, а не внутри него?
Нужно ли мне уведомлять, ждать или присоединяться к командам?
public class HelpPlease {
public int myIntArray[] = new int[100];
public void chooseSquare() {
...
Handler handler=new Handler();
final Runnable r = new Runnable()
{
public void run()
{
synchronized(myIntArray) {
delayedMethod1();
}
}
};
handler.postDelayed(r, 1000);
...
Handler handler2=new Handler();
final Runnable r2 = new Runnable()
{
public void run()
{
synchronized(myIntArray) {
delayedMethod2();
}
}
};
handler2.postDelayed(r2, 1000);
...
synchronized(myIntArray) {
method3();
}
}
public void delayedMethod1() {
...
change myIntArray;
otherMethodsABC();
{
public void delayedMethod2() {
...
change myIntArray;
otherMethodsDEF();
}
public void method3() {
...
change myIntArray;
otherMethodsGHI();
}
}
Дополнительные сведения: Handler/Runnable задерживает создание событий, которые иногда не синхронизируются
РЕДАКТИРОВАТЬ:
Имеет ли это смысл? Запустить поток и дождаться его завершения? Не знаю, как добавить задержку, и в этом весь смысл.
//Handler handler=new Handler();
final Runnable r = new Runnable()
{
public void run()
{
delayedMethod();
}
};
//handler.postDelayed(r, COMPUTER_MOVE_DELAY);
ExecutorService es = Executors.newFixedThreadPool(1);
final Future f1 = es.submit(r);
try
{
f1.get();
}
catch (InterruptedException e)
{
throw new RuntimeException(e);
}
catch (ExecutionException e)
{
throw new RuntimeException(e);
}