1抖单、要分析清楚HTTP請求和xxx變量之間的對應關系:
一個HTTP請求對應一個工作線程缤弦;
一個HTTP請求對應一個xxx變量。
如果是這種對應關系压彭,那么xxx變量應該聲明為局部變量闻妓,即寫在service方法中>稹!而不要聲明為實例變量(全局變量由缆,類下面的注祖,不是類下面的方法下面的)猾蒂,它們的生命周期不同,實例變量隨實例的生而生是晨,亡而亡婚夫;局部變量隨著service方法生而生,亡而亡署鸡。
顯然案糙,這個例子是每個工作線程訪問它自己的局部變量,所以有了下邊的并發(fā)問題靴庆。
2时捌、如果HTTP請求和線程,以及xxx變量的關系如下:
一個HTTP請求對應一個工作線程炉抒;
所有HTTP請求對應同一個xxx變量奢讨。
那么,此時就用實例變量焰薄,而非局部變量D弥睢!比如塞茅,每一次的求和亩码。在這個例子中,不僅要聲明為實例變量野瘦,還要使用Java同步機制對多線程同步描沟,使得多線程對xxx實例變量進行同步訪問,用synchronized關鍵字鞭光,寫成同步代碼塊就行了吏廉。這樣,只有當一個工作線程退出同步代碼塊時惰许,其他線程才允許執(zhí)行同步代碼塊席覆,這使得任意時刻不會有兩個線程同時操作同一個xxx實例變量,因此就能避免并發(fā)問題汹买。