为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

尚方宝剑之说 2021-10-28 10:11:10
我正在处理一个简单的消息队列,我正在为新连接创建单独的线程。我想知道哪些变量可以访问并且可以被多个线程修改。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


查看完整回答
反对 回复 2021-10-28
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

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


查看完整回答
反对 回复 2021-10-28
  • 2 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信