我正在处理一个简单的消息队列,我正在为新连接创建单独的线程。我想知道哪些变量可以访问并且可以被多个线程修改。class RequestHandler implements Runnable { Socket socket; protected RequestHandler(Socket socket) { this.socket = socket; } public void run() { ..........在上面的代码中,套接字可以被多个线程访问,如果是,那么我该如何保护它。完整代码可在。https://github.com/nakshay/JQueue我是多线程的新手,如果需要请修改问题。
2 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
如果多个线程可以访问套接字变量,则需要同步访问该变量。
一种方法是创建一个包装器,它基本上将同步方法调用[1]。
然后将您的套接字包装在构造函数中:
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条经验 获得超8个赞
帖子中没有显示:您实际上为每个线程创建了一个新的 RequestHandler 和 Socket,因此由于套接字不是静态的,所以您没问题。每个线程处理自己的连接(由 Socket 表示)。
添加回答
举报
0/150
提交
取消