2017-08-01 30 views
1

私はクライアントからの非同期GET呼び出しと1つのPOST要求を持っています。 私のサーブレットがPOSTリクエストを受け取った後、私はGETコールを別の方法で処理したいと思います。ここで私は試みたが、失敗したものです:Java JavaScriptからの非同期呼び出しの同期

public class MyServlet { 

    private static volatile proceed = true; 

    public void doGet(req, resp) { 
     ... 
     doGetAnswer(req, resp); 
     ... 
    } 

    public void doPost(req, resp) { 
     ... 
     doPostAnswer(req, resp); 
     ... 
    } 

    public String doGetAnswer(req, resp) { 
     if (proceed) 
      return "Answer GET request"; 
     else 
      return "Do NOT answer GET request"; 
    } 

    public String doPostAnswer(req, resp) { 
     proceed = false; 
     return "POST called, stopping GET requests"; 
    } 
} 

私の問題は、GET呼び出しによって実行されているスレッドがvolatile変数の変更を認識しないということです。あなたは、プリミティブ型変数の同時読み取り/書き込みがあるとき

答えて

1

非常に珍しいデザイン...とにかく

は、あなたがアトミック*データ型を使用することをお勧めします。

それはあなただけの私に答え時点で、働く、ありがとう

+0

proceed.set(false)proceed = false;を交換しif (proceed.get())

if (proceed)を交換しAtomicBoolean proceed = new AtomicBoolean(true)

volatile proceed = trueを交換してください:

AtomicBooleanは、トリックを行うもの解決策をどこかで読んでください。あなたは「まれなデザイン」とはどういう意味ですか? –

関連する問題