|
|
1
11
在 一些 全部的 处决。 实际上,另一个线程有可能在执行的中途获取锁(无论是对于这个方法还是同一个监视器上的其他代码锁)。如果方法本身是同步的,就不会发生这种情况,因此它们不是等价的。
(作为旁白,锁定
编辑:要响应您的编辑:
绝对不是!我保证你 不会
一次可以在非同步部分执行任意数量的线程。对于任何一个实例(因为您正在
此外,听起来您希望调度器保证在等待锁时让另一个线程获取锁。我不相信有任何这样的保证-一个线程执行第一个块可以释放锁,但继续在同一时间片,并重新获得它之前,任何其他线程进入。在某些jvm中,这种情况可能不会发生,但我不相信有任何保证。 |
|
|
2
3
不,不是。例如上面的代码 线程1进入第一个sync'd块并执行它,然后退出。 线程2进入第一个sync'd块执行它,然后在被关闭之前进入第二个sync'd块。 线程1现在无法继续,直到线程2退出第二个同步块。
|
|
|
3
3
|
|
|
4
2
假设synchronized关键字用于在Java中实现监视器,则不能保证给定的代码段是同步的。
实际上,两个线程是否都可以完成第一个同步块,然后执行语句以增加
我假设变量
sample chapter from Inside the Java Virtual Machine 编辑 : 考虑到这个问题现在反映了本地字符串对象的使用,操作序列可以被认为是线程安全的。每个线程在堆栈上创建自己对String对象的本地引用;一个线程中对象的任何变异都不会影响另一个线程,因为字符串对象的属性是不可变的(当发生变异时,会为所有实际目的创建一个新的字符串对象,因此状态不会在线程之间真正共享)。 强调 : 在尝试线程同步时,如果对共享数据的访问是互斥的,则认为操作序列是线程安全的;这样一来,一个线程将无法读取或写入共享变量,而另一个线程正在执行涉及共享数据的操作。只使用局部变量,消除了线程之间的共享感。 |
|
|
5
1
如果这些操作不是原子化的,那么
|
|
|
6
0
此方法与使其成为同步方法不同。 |
|
|
vitaminC · 执行程序时无法理解tryLock方法 1 年前 |
|
|
Ronald · 用Java同步此vs字段 2 年前 |
|
|
Uuuuuumm · 当一个方法被并发方法调用时,我如何同步运行它 2 年前 |
|
|
wpunkts · 如何使用外部信号控制视频播放的速度和方向 2 年前 |