带有 var=Thread.currentThread() 的代码块上的 synchronized(...) [重复]
Posted
技术标签:
【中文标题】带有 var=Thread.currentThread() 的代码块上的 synchronized(...) [重复]【英文标题】:synchronized(...) on a code block with var=Thread.currentThread() [duplicate] 【发布时间】:2015-08-12 02:26:05 【问题描述】:我正在阅读这个类的代码:
public class MultiThreadedServer implements Runnable
// some more code
protected Thread runningThread = null;
public void run()
synchronized(this)
this.runningThread = Thread.currentThread();
// lots of code
这是什么意思?线程本身用作锁定资源的标志?我完全不明白。
有人知道吗?
【问题讨论】:
// blablahbla
- // lots of blahblahblah
- 这对我来说是不行的。 this
指向MultiThreadedServer
的实例,而不是线程(它的标识符无效)
我喜欢protected Thread running thread = null;
中的空间
它不使用线程作为锁,它使用 Runnable 对象。是否将同一对象分配给多个线程? Runnable中还有其他同步的方法吗?
啊,错字了,对不起各位。 @Steven Pessall 在此方法中没有同步其他任何内容。
【参考方案1】:
this
是Runnable
,而不是线程,因此在您编写时不是在线程本身上完成同步。
这可能有点令人困惑,但如果例如,它是非常可行的。该对象被多个并发线程访问。
干杯,
【讨论】:
所以它会同步 Runnable 以避免并发访问线程之间共享的 run() 方法? @Csi 不是整个run
方法,而只是 synchronized(this)
块【参考方案2】:
this.runningThread = Thread.currentThread();
简单地给你一个指向当前线程的链接。
这样您就不必一直调用Thread.currentThread()
,从而节省了方法调用开销。
嗯,protected Thread running thread = null;
中的空格也无济于事......
【讨论】:
runningThread
字段不仅仅是为了方便,我非常怀疑它仅用于run
方法,特别是因为它被标记为protected
。
啊,runningThread 的错字,抱歉。以上是关于带有 var=Thread.currentThread() 的代码块上的 synchronized(...) [重复]的主要内容,如果未能解决你的问题,请参考以下文章