|
我在理解
具體以下幾點(diǎn)對(duì)我來(lái)說(shuō)很難理解,
那是什么意思 ? 我的理解是,如果在定義新會(huì)話之前創(chuàng)建線程,或者在舊會(huì)話中創(chuàng)建線程,則它將不會(huì)引用當(dāng)前新創(chuàng)建的會(huì)話. 目前我有線程池,一些線程指的是現(xiàn)在關(guān)閉的舊會(huì)話然后我將面臨在這些線程中使用會(huì)話的問(wèn)題. 我正在使用帶vaadin的spring,特別是@Async方法調(diào)用.
問(wèn)題是,thread1已被用于執(zhí)行methodX,現(xiàn)在我已經(jīng)使用了session session1,在用戶注銷后,這個(gè)session1將被關(guān)閉. 現(xiàn)在,當(dāng)新用戶登錄到具有session2的系統(tǒng)并再次使用thread1執(zhí)行此方法時(shí),此方法仍然使用session1而不是session2,并且當(dāng)方法嘗試從關(guān)閉的session1獲取數(shù)據(jù)時(shí)會(huì)產(chǎn)生問(wèn)題. 我的問(wèn)題: >為什么Vaadin無(wú)法提供或通知舊線程(即屬于舊(已關(guān)閉)會(huì)話的線程)有關(guān)新定義的會(huì)話? 解決方法: 這意味著如果您在單獨(dú)的線程中處理數(shù)據(jù),則不會(huì)有當(dāng)前會(huì)話: 所以這段代碼:
在您的vaadin項(xiàng)目中將打印一個(gè)舊會(huì)話,即Thread啟動(dòng)時(shí)的會(huì)話. 編輯 我認(rèn)為Vaadin無(wú)法為舊線程提供新會(huì)話以避免數(shù)據(jù)損壞問(wèn)題.我的意思是如果5個(gè)Threads正在編輯同一個(gè)會(huì)話,你將遇到問(wèn)題…… 您的解決方案是為池中的每個(gè)線程提供Session,但我真的不知道如何實(shí)現(xiàn)這一點(diǎn),Google到目前為止還沒(méi)有給我答案. 編輯:另一種可能的解決方 使用HashMap< int,VaadinSession>創(chuàng)建一個(gè)類來(lái)存儲(chǔ)每個(gè)Sessions(使用SessionListener).以靜態(tài)的方式. 創(chuàng)建線程時(shí),請(qǐng)為其提供需要使用的會(huì)話的ID(id是與HashMap中所需會(huì)話對(duì)應(yīng)的鍵).然后每次編輯,銷毀會(huì)話時(shí),只需在HashMap中編輯它. 由于此HashMap的靜態(tài)行為,您可以隨時(shí)從任何線程訪問(wèn)它,您唯一需要的是與線程中的會(huì)話相對(duì)應(yīng)的int id. 來(lái)源:https://www./content-1-276551.html |
|
|