以下のコードはmyIntArrayを同期するために正当ですか?
下部の3つのメソッドがmyIntArrayを順不同に変更するのを防ぎますか?
物事がdelayedMethod1、delayedMethod2、method3の順序で発生し、前のものがmyIntArrayへの変更を完了する前に実行することによってそれらの1つが台無しにならないようにしたい。
下の3つのメソッド宣言には、同期されたキーワードが必要ですか?
下の3つのメソッドには、synchronized(myIntArray)ブロックを含める必要がありますか?
同期されたブロックは、Runnableの内部ではなく、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 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);
}