我正在處理一個簡單的消息隊列,我正在為新連接創(chuàng)建單獨的線程。我想知道哪些變量可以訪問并且可以被多個線程修改。class RequestHandler implements Runnable { Socket socket; protected RequestHandler(Socket socket) { this.socket = socket; } public void run() { ..........在上面的代碼中,套接字可以被多個線程訪問,如果是,那么我該如何保護它。完整代碼可在。https://github.com/nakshay/JQueue我是多線程的新手,如果需要請修改問題。
2 回答

胡說叔叔
TA貢獻1804條經(jīng)驗 獲得超8個贊
如果多個線程可以訪問套接字變量,則需要同步訪問該變量。
一種方法是創(chuàng)建一個包裝器,它基本上將同步方法調(diào)用[1]。
然后將您的套接字包裝在構(gòu)造函數(shù)中:
class RequestHandler implements Runnable {
Socket socket;
protected RequestHandler(Socket socket) {
this.socket = new SynchronizedSocket(socket);
}
public void run() { ..........
[1] - https://gist.github.com/Sammers21/a6635213276e9ea064a5a4f20dd53c11

寶慕林4294392
TA貢獻2021條經(jīng)驗 獲得超8個贊
帖子中沒有顯示:您實際上為每個線程創(chuàng)建了一個新的 RequestHandler 和 Socket,因此由于套接字不是靜態(tài)的,所以您沒問題。每個線程處理自己的連接(由 Socket 表示)。
添加回答
舉報
0/150
提交
取消