Java-同步和启动线程

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


synchronized void someMethod() {

    //Do stuff.

    new Thread(new Runnable() {

        public  void run() {

            //Do more stuff.

        }

    }).start();

}

也就是说,当呼叫退出时其他人Thread是否能够访问它,或者新创建的对象也必须完成?someMethodThreadsomeMethodThread


www说
浏览 125回答 3
3回答

繁花不似锦

当调用someMethod的线程退出时,它不会等待新线程完成。

小怪兽爱吃肉

每当someMethod()释放对象所属实例上的监视器时。这应该Thread.start()在您的代码中调用后。这里没有魔术,synchronized适用标准规则。

繁星coding

同步方法意味着只有一个线程能够一次访问任何方法执行。这包括声明和执行一个新实例,以及示例中的新线程实例:   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访问每个线程
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java