【发布时间】:2014-08-24 12:52:42
【问题描述】:
我一直在阅读本地对象在 Java 中是线程安全的,如果它没有被传递给另一个线程的话。 有人可以解释为什么它是线程安全的,因为对象不在堆栈中维护吗? 还有一个示例/模式,某人如何将本地对象传递给另一个线程?
【问题讨论】:
-
开始阅读here
-
假设您租了一个房间。每次你把房间租给别人时,你必须小心你还没有把房间租给别人。现在如果你把房间专用给一个人,那么这个人是唯一可以租用房间的人,你在租用之前不需要做任何检查。房间不是共享的,所以没有空间(没有双关语)发生冲突。线程安全是关于共享状态的。没有共享状态,没问题。
-
正如 Marko 所说,如果一个对象只能从单个线程访问,那么从所有实际目的来看,它都是“线程安全的”。 “局部变量”只能在声明它的方法中访问,因此从局部变量引用的任何对象都只能在本地访问,除非您以某种方式将对象引用“传递”给另一个线程。
-
"如果它没有被传递给另一个线程,为什么它是线程安全的?"嗯,这是因为它没有被传递给另一个线程。如果只有一个线程可以使用该对象,那么两个线程同时尝试使用它的可能性为零。
-
"...如果它没有被传递给另一个线程..." 如果线程 A 创建了一个对象 O,并且它没有存储对 O 的引用,任何其他线程都可以看到它,那么很明显,没有其他线程能够使用对象 O。
标签: java multithreading thread-safety