为了账号安全,请及时绑定邮箱和手机立即绑定

Java-同步和启动线程

Java-同步和启动线程

www说 2021-05-12 17:13:43
我想知道,如果我创建一个方法synchronized然后Thread在此方法中启动一个,其他人何时Thread才能使用该方法?synchronized void someMethod() {    //Do stuff.    new Thread(new Runnable() {        public  void run() {            //Do more stuff.        }    }).start();}也就是说,当呼叫退出时其他人Thread是否能够访问它,或者新创建的对象也必须完成?someMethodThreadsomeMethodThread
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

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


查看完整回答
反对 回复 2021-05-26
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

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


查看完整回答
反对 回复 2021-05-26
?
繁星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访问每个线程


查看完整回答
反对 回复 2021-05-26
  • 3 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信