synchronized(…) on a code block with var=Thread.currentThread()
我在这门课上读代码:
1 2 3 4 5 6 7 8 9 10 11
| public class MultiThreadedServer implements Runnable {
// some more code
protected Thread runningThread = null;
public void run () {
synchronized(this) {
this. runningThread = Thread. currentThread();
}
// lots of code
}
} |
这是什么意思?线程本身用作锁定资源的标志?我一点也不明白。
有人知道吗?
- 埃多克斯1〔0〕—埃多克斯1〔1〕—这对我来说是不允许的。this指向MultiThreadedServer 的实例,而不是线程(其标识符无效)
- 我喜欢protected Thread running thread = null;的空间
- 它不使用线程作为锁,而是使用可运行的对象。同一对象是否被赋予多个线程?可运行文件中还有其他同步的方法吗?
- 啊,打字错误,抱歉。@Steven Pessall此方法中没有其他内容同步。
this是一个Runnable而不是一个线程,因此在编写时不会在线程本身上进行同步。
它可能有些混乱,但如果对象被几个并发线程访问,则非常可行。
干杯,
- 所以它同步runnable以避免并发访问线程间共享的run()方法?
- @CSI不是整个run方法,只是synchronized(this)块
this.runningThread = Thread.currentThread();只是给您一个到当前线程的链接。
这样就不必一直调用Thread.currentThread(),从而节省了方法调用开销。
嗯,protected Thread running thread = null;的空间也没用……
- 字段runningThread 不仅仅是为了方便,我很怀疑它仅用于run方法,特别是因为它被标记为protected方法。
- 啊,跑线上的错别字,对不起。