Java-同步和启动线程

时间:2018-07-13 21:17:00

标签: java multithreading synchronized

我想知道,如果我创建方法synchronized然后在此方法中启动Thread,其他Thread何时才能使用该方法?

synchronized void someMethod() {
    //Do stuff.
    new Thread(new Runnable() {
        public  void run() {
            //Do more stuff.
        }
    }).start();
}

也就是说,当Thread调用someMethod退出时,其他Thread将能够访问someMethod还是新创建的Thread必须还完成吗?

3 个答案:

答案 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访问每个线程