Java - 同步和启动线程
Java - Synchronizing and Starting Threads
我想知道,如果我创建一个方法 synchronized
然后在这个方法中启动一个 Thread
什么时候其他 Thread
可以使用该方法?
synchronized void someMethod() {
//Do stuff.
new Thread(new Runnable() {
public void run() {
//Do more stuff.
}
}).start();
}
也就是说,当调用 someMethod
的 Thread
退出时,其他 Thread
是否能够访问 someMethod
或新创建的 Thread
也必须完成吗?
当调用 someMethod 的线程退出时,它不会等待新线程完成。
每当 someMethod()
所属的对象实例上的监视器被释放时。这应该在您的代码中调用 Thread.start()
之后。这里没有魔法,适用 synchronized
的标准规则。
同步方法意味着只有一个线程能够同时访问任何方法执行。这包括声明和执行一个新实例,以及您的示例中的新线程实例:
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 访问每个线程
我想知道,如果我创建一个方法 synchronized
然后在这个方法中启动一个 Thread
什么时候其他 Thread
可以使用该方法?
synchronized void someMethod() {
//Do stuff.
new Thread(new Runnable() {
public void run() {
//Do more stuff.
}
}).start();
}
也就是说,当调用 someMethod
的 Thread
退出时,其他 Thread
是否能够访问 someMethod
或新创建的 Thread
也必须完成吗?
当调用 someMethod 的线程退出时,它不会等待新线程完成。
每当 someMethod()
所属的对象实例上的监视器被释放时。这应该在您的代码中调用 Thread.start()
之后。这里没有魔法,适用 synchronized
的标准规则。
同步方法意味着只有一个线程能够同时访问任何方法执行。这包括声明和执行一个新实例,以及您的示例中的新线程实例:
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 访问每个线程