我对线程同步感到困惑。考虑我有两个线程 Thread1 和 Thread2 和两个方法 synchronized foo1()和 foo2()。 foo1()是 synchronized 方法而foo2()不是,在foo1内部有一个语句调用foo2()并且如果Thread1调用foo1()并且它在foo2()方法中工作同时,Thread2想要直接访问foo2()方法,这是不同步的。
所以我的问题是 Thread2会访问Foo2()吗?还是会等待Thread1完成它的任务?
答案 0 :(得分:4)
如果foo2()
未同步,则任何线程都可以随时调用它而不会被阻止。线程是否从另一个自身同步的方法调用它没有任何区别。
答案 1 :(得分:3)
它是对象,而不是被锁定的方法。这意味着如果他们访问不同的对象,你可以在foo1()中拥有两个线程。如果他们正在访问同一个对象,那么无论先调用什么或调用什么,相同的锁都会阻止并发访问。
BTW:foo1()可以调用自己,因为它已经锁定了。
答案 2 :(得分:1)
Thread2不会被阻止,也不会等待。 它将开始执行Foo2,因为它没有同步。
答案 3 :(得分:0)
Thread2可以直接调用foo2(),因为foo2()不是同步方法,所以任何线程都可以调用它而不是获取当前对象的监视器。