私は着信メッセージを処理するアプリケーションで作業しています。私はJavaマルチスレッドに堪能ではなく、私はあなたの助け、人々に頼んでいます。次のアプリの構造に間違いはありますか?可能なロック/パフォーマンスの問題
stopRequestedブール値フィールドを持つメインアプリケーションクラスがあります。受信メッセージを受信し処理する内部実行可能クラスがあります。 stopRequestedをtrueに設定する別のスレッドもあります。
このアプローチは有効で信頼できるのですか、間違っていますか?以下は
私のコードの一部ではあります:
class ApplicationClass {
// we set this var in another thread
// when it is necessary to stop
private stopRequested = false;
public ApplicationClass() {
// starting message processing thread
(new Thread(new MessageProcessing())).start();
}
private class MessageProcessing implements Runnable {
public void run() {
while (!stopRequested) {
if (getNewMessagesCount() > 0) {
processNewMessages();
}
}
}
}
}
ありがとうございました。
揮発性の使用は非常に重要です。このコードを使用してください: 'private volatile boolean stopRequested = false;' – Nayuki
しかし、一般に、 'LinkedBlockingQueue.poll()'のようなものを使うと、書くコード量が減るので、バグの可能性は低くなります。 – Nayuki