2017-08-01 81 views
1

我有很多來自客戶端和一個POST請求的異步GET調用。 我的servlet獲得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

非常少見的設計...

無論如何,當你有一個基本類型變量的並行讀/寫,你可能需要使用原子*數據類型。

AtomicBoolean應做的伎倆:

更換volatile proceed = true通過AtomicBoolean proceed = new AtomicBoolean(true)

通過if (proceed.get())

更換if (proceed)通過proceed.set(false)

+0

更換proceed = false;謝謝你,它的工作原理,通過你的回答我剛纔的時間在某處閱讀解決方案。 「非常不尋常的設計」是什麼意思? –