|
1
17
如果同步该方法并尝试同时调用它两次,则一个线程必须等待两分钟。 这不是一个真正的“劣势”问题。是否需要同步,取决于方法的功能。
如果希望同时运行代码只保存一次系统资源,则可能需要考虑计数。 Semaphore ,这提供了更大的灵活性(例如能够配置并发执行的数量)。
|
|
|
2
4
如果该方法的执行时间为分钟,则可能不需要在如此粗略的级别对其进行同步,并且可以使用更细粒度的系统,可能只锁定该方法当前正在操作的数据结构的部分。当然,您应该尝试确保您的关键部分不是真正的2分钟长-任何需要那么长时间执行的方法(无论是否存在其他线程或锁)都应该仔细研究,作为并行化的候选方法。对于如此耗时的计算,您可能会获取和释放数百个锁,但仍然可以忽略不计。(或者,换一种说法,即使您需要引入大量锁来并行化此代码,开销可能不会很大。) |
|
|
3
2
|
|
|
4
1
如果对象由多个线程共享,如果一个线程试图在另一个线程调用对象时调用该对象上的synchronized方法,则该对象将被阻止1到2分钟。在最坏的情况下,您可能会遇到瓶颈,系统的吞吐量主要由一次执行一个计算来控制。
|
|
|
5
0
在简单的两行中,Java中同步方法的缺点是:
|
|
|
6
0
第一个缺点是,在等待执行同步代码时被阻止的线程不能被中断。一旦被阻止,它们的线程就会被卡住,直到它们获得代码同步对象的锁为止。
第三个缺点是,我们无法测试对象的内在锁是否可用,也无法找出关于锁的任何其他信息。如果锁不可用,我们也无法在等待锁一段时间后超时。当我们到达一个同步块的开头时,我们可以获得锁并继续执行,或者在该行代码处阻塞,直到获得锁为止。 第四个缺点是,如果多个线程正在等待获得锁,则不是先到先得。JVM选择下一个获得锁的线程的顺序没有设置,因此第一个被阻止的线程可能是最后一个获得锁的线程,反之亦然。
|
|
|
7
-1
在简单的两行中,Java中同步方法的缺点是:
|
|
|
vitaminC · 执行程序时无法理解tryLock方法 2 年前 |
|
|
Ronald · 用Java同步此vs字段 3 年前 |
|
|
Uuuuuumm · 当一个方法被并发方法调用时,我如何同步运行它 3 年前 |
|
|
wpunkts · 如何使用外部信号控制视频播放的速度和方向 3 年前 |