【发布时间】:2018-10-05 07:38:47
【问题描述】:
我正在处理一个简单的消息队列,我正在为新连接创建单独的线程。我想知道哪些变量是可访问的,并且可以被多个线程修改。
class RequestHandler implements Runnable {
Socket socket;
protected RequestHandler(Socket socket) {
this.socket = socket;
}
public void run() { ..........
上面的代码是socket可以被多个线程访问,如果是那么我该如何保护它。
完整的代码可在以下位置获得。 https://github.com/nakshay/JQueue
我是多线程新手,如有需要请修改问题。
【问题讨论】:
-
任何非局部变量都可以被多个线程访问,前提是这些线程具有对其所属实例的引用(或可以静态访问该成员)。
-
这似乎是个坏主意。为什么不为每个套接字设置一个单独的线程? stackoverflow.com/a/6672647/14955
-
@AndyTurner 的评论在技术上是正确的,因为任何数量的线程都可以访问他们引用的任何字段,但是为了确保对这些字段的更新正确可见,您必须考虑线程同步(
final不可变或synchronized或volatile等)。
标签: java multithreading