Java中的多个线程可访问哪些变量?

时间:2018-10-05 07:38:47

标签: java multithreading

我正在一个简单的消息队列中,在其中为新连接创建单独的线程。我想知道哪些变量可以访问,并且可以被多个线程修改。

class RequestHandler implements Runnable {

    Socket socket;

    protected RequestHandler(Socket socket) {
        this.socket = socket;
    }

    public void run() { ..........

在上面的代码中,套接字可以被多个线程访问,如果可以,那么我该如何保护它。

完整代码可在处获得。 https://github.com/nakshay/JQueue

我是多线程新手,如果需要,请修改问题。

2 个答案:

答案 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表示)。