猿问

java中的多线程可以访问哪些变量?

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


class RequestHandler implements Runnable {


    Socket socket;


    protected RequestHandler(Socket socket) {

        this.socket = socket;

    }


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

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


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


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


尚方宝剑之说
浏览 161回答 2
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

宝慕林4294392

帖子中没有显示:您实际上为每个线程创建了一个新的 RequestHandler 和 Socket,因此由于套接字不是静态的,所以您没问题。每个线程处理自己的连接(由 Socket 表示)。
随时随地看视频慕课网APP

相关分类

Java
我要回答