zzazzles:
私は、単一のスレッド内のスレッド間で双方の排他的なアクセスを提供するJavaでのミューテックスを必要としています。このような非常にシンプルな何かをして:
Lock l = new ReentrantLock();
for (int i = 0; i < 5; i++) {
Log.d(TAG, "Lock = " l.tryLock());
}
驚くべきは、すべての呼び出しのために、私は真なります:
Lock = true
Lock = true
Lock = true
Lock = true
Lock = true
なぜこれがある、または私は間違って何か根本的にやりましたか?
富:
名前が言うように、それはだ凹角それを再取得することができます所有しているスレッドを意味します、。
これは、そうでない場合は、あなたが簡単にシングルスレッドのデッドロックを作成することができ、良いことです。
だから、何のことはないではないブールセマフォとして機能しません。あなたはブールセマフォをしたい場合は、使用new Semaphore(1);
。あなたは、自己デッドロックが発生するつもりならば、確認してますが、あなたはそれを解決することができます別のスレッドを持っています。