次のクラスDoStuffはスレッドを開始し、nullのときにリスナーオブジェクトがアクセスされないように同期します。同期関数への外部呼び出しの保持/ロック
DoStuffクラスの関数setOnProgressListener()に外部からアクセスすると、関数呼び出しを終了する前に呼び出しが長時間保持されるため、問題が発生しています。なぜこのようなことが起こるのか分かりません。私は同期が多くのコールをキューに入れているかのように思えますか?これの入力は助けになります!
私はもはやこのステータスの更新を希望しないため、リスナーにnullを渡しています。私はDoStuff Threadを殺すプロセスの一環としてこれを行います。
ありがとうございます!
public class DoStuff extends Runnable
{
Object MUTEX = new Object();
private OnProgressListener mOnProgressListener = null;
public DoStuff()
{
new Thread(this).start();
}
public void setOnProgressListener(OnProgressListener onProgressListener)
{
synchronized (MUTEX)
{
mOnProgressListener = onProgressListener;
}
}
private void reportStatus(int statusId)
{
synchronized (MUTEX)
{
if (null != mOnStatusListener)
{
mOnStatusListener.setStatusMessage(new OnStatusEvent(this, statusId));
}
}
}
// this is the run of a thread
public void run()
{
int status = 0;
do
{
// do some work and report the current work status
status = doWork();
reportStatus(status);
} while(true);
}
}
私は、簡略化した例では、重要ではないすべての点を見つけることができました。 :) – biziclop