目次

排他制御

概要

マルチタスク/マルチスレッド環境下では、同じリソースに同時にアクセスが発生しないように排他制御をおこなう必要がある(場合がある)。

Androidの多くのプログラムはJavaで記述されているので、Javaの排他制御の手法に従って実装をすれば良い。

Javaの排他制御は、任意のオブジェクトに対して synchronizedを行い、synchronizedに付随するブロックの中の処理が、同じオブジェクトに対してsynchronizedしているブロックとの間で排他制御が行われる。

public static final Object[] lock = new Object[0];
...
synchronized(lock) {
   // 排他制御したい処理をここに書く。
    ...
}

排他制御に使うオブジェクトは任意のものでよく、実装上軽量であるのはサイズ0の配列であるとのこと1)なので、それを使っているが、勿論、排他制御のためだけにオブジェクトを作る必要はなく、他のオブジェクトを流用しても構わない。 とはいえ、読みにくくなるので、分けた方がわかりやすいだろう。

Androidに関して

1)
AndroidのBackupAgentのドキュメントにそのような記述あり。