我正在一个简单的消息队列中,在其中为新连接创建单独的线程。我想知道哪些变量可以访问,并且可以被多个线程修改。
class RequestHandler implements Runnable {
Socket socket;
protected RequestHandler(Socket socket) {
this.socket = socket;
}
public void run() { ..........
在上面的代码中,套接字可以被多个线程访问,如果可以,那么我该如何保护它。
完整代码可在处获得。 https://github.com/nakshay/JQueue
我是多线程新手,如果需要,请修改问题。
答案 0 :(得分:2)
如果套接字变量可以被多个线程访问,则需要同步对该变量的访问。
方法之一是创建包装器,该包装器基本上将同步方法调用[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
答案 1 :(得分:1)
帖子中未显示:实际上,您为每个线程创建了一个新的RequestHandler和Socket,因此,由于套接字不是静态的,所以很好。每个线程处理自己的连接(由Socket表示)。