我想知道,如果我创建一个方法synchronized然后Thread在此方法中启动一个,其他人何时Thread才能使用该方法?synchronized void someMethod() { //Do stuff. new Thread(new Runnable() { public void run() { //Do more stuff. } }).start();}也就是说,当呼叫退出时其他人Thread是否能够访问它,或者新创建的对象也必须完成?someMethodThreadsomeMethodThread
3 回答
![?](http://img1.sycdn.imooc.com/545847d40001cbef02200220-100-100.jpg)
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
每当someMethod()
释放对象所属实例上的监视器时。这应该Thread.start()
在您的代码中调用后。这里没有魔术,synchronized
适用标准规则。
![?](http://img1.sycdn.imooc.com/5c4aa098000126bb09600960-100-100.jpg)
繁星coding
TA贡献1797条经验 获得超4个赞
同步方法意味着只有一个线程能够一次访问任何方法执行。这包括声明和执行一个新实例,以及示例中的新线程实例:
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访问每个线程
添加回答
举报
0/150
提交
取消