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();
}

也就是说,当调用 someMethodThread 退出时,其他 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 访问每个线程