我想知道,如果我创建方法synchronized
然后在此方法中启动Thread
,其他Thread
何时才能使用该方法?
synchronized void someMethod() {
//Do stuff.
new Thread(new Runnable() {
public void run() {
//Do more stuff.
}
}).start();
}
也就是说,当Thread
调用someMethod
退出时,其他Thread
将能够访问someMethod
还是新创建的Thread
必须还完成吗?
答案 0 :(得分:1)
当调用someMethod的线程退出时,它不会等待新线程完成。
答案 1 :(得分:1)
每释放someMethod()
所属对象实例上的监视器。这应该在您的代码中调用Thread.start()
之后。这里没有魔术,synchronized
的标准规则适用。
答案 2 :(得分:0)
同步方法意味着只有一个线程能够一次访问任何方法执行。这包括声明和执行一个新实例,以及示例中的新线程实例:
new Thread(new Runnable() {
public void run() {
//Do more stuff.
}
}).start();
下一个要触发的线程将声明一个新的实例,并且由于您尚未将先前声明的线程存储在任何地方,因此无法访问该线程。
可以通过一些修改来访问它:
synchronized void someMethod(int id, HashMap threadsMap) {
//Do stuff.
threadsMap.set(id, new Thread(new Runnable() {
public void run() {
//Do more stuff.
}
}));
threadsMap.get(id).start();
}
这将允许您按其ID访问每个线程