【发布时间】:2018-11-06 14:09:59
【问题描述】:
假设我在类ABC 中有方法synchronized hi(){} 和synchronized hello(){}。两个线程t1 和t2 分别执行t1.hi() 和t2.hello()。它们可以同时执行还是有什么问题?
【问题讨论】:
-
我认为它们不会同时执行。我认为同步方法基本上是对象本身的锁,所以一旦执行了一个方法,线程就会获取锁,因此其他线程无法再次获取锁来执行另一个同步方法。
-
阅读
synchronized关键字和一般同步机制。还要注意ti.hi()没有任何意义,除非ABC extends Thread是ABC的一部分。在这种情况下,t1和t2将是 2 个不同的实例,它们不会相互影响。但是,如果两个线程都在ABC的 same 实例上运行,则这两个方法不能并行执行(它们可以被调用,但一个线程必须等待) - 那是因为 @987654335 @在方法级别使用当前实例作为它的监控对象。 -
所以 ABC 扩展了 Thread,或者两个线程在同一个 ABC 实例上工作?请更新一些代码。
-
不清楚您在问什么:
t1和t2是您的ABC类的两个不同实例吗?还是它们是两个不同的线程,它们都在调用属于同一实例的方法?如果您编辑问题以添加一些实际代码,这可能会有所帮助(很多!)。
标签: java multithreading synchronized