|
|
1
4
当您声明要同步的方法时,例如:
编译器将其视为您编写的:
记住:同步对象不会阻止其他线程调用该对象上的方法。它只防止另一个线程使用同一个锁对象进入同步块。 顺便说一下,通常最好有一个内部锁对象,而不是声明要同步的方法,例如。
因为我锁定了foo的实例,所以同步的方法(带有它们的隐式“synchronized(this)”)将无法获得锁,并将永远阻塞。最重要的是,你不能阻止这一点,因为我可以在任何我喜欢的对象上同步。很明显,这个例子是极端的,但是如果你对这类事情不小心的话,你可能会得到讨厌的,微妙的死锁错误。 |
|
|
2
8
只有关键字为synchronized的方法持有
这
当线程在该方法中运行时。
|
|
|
3
3
在这两种情况下,第二个线程都将被授予执行其方法的权限。
因为这两个方法中只有一个包含
在这里我还假设
synchronized (this) {
}
如果是这样的话,结果就不一样了。
|
|
|
4
2
一个方法是同步的,而另一个不是。因此,无论对象上的锁(在本例中是方法所属的实例)是否已被获取,非同步方法都将不受阻碍地执行(因为它不试图获取或等待锁)。这意味着在这两种情况下,两个线程都将在不等待对方的情况下运行,这可能导致对象的状态不一致。 |
|
|
5
0
method1()是同步的,因此称为线程安全方法。当多个线程试图同时访问此方法时,只有实例对象上的锁才能工作。
在这两种情况下,您提到的一个线程将通过调用method1()获得实例的锁,另一个线程将尝试访问method2(),这是不安全的,因此两个线程都将执行。
|
|
|
6
0
两个线程都将像不存在锁一样执行。
如果两个线程都执行method1,其中一个线程将阻塞,直到另一个线程退出该方法并释放锁为止。 要确保只有一个线程执行,所有其他线程等待,必须使两个方法同步。 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 8 月前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 8 月前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 8 月前 |
|
|
rudraraj · java中未声明最终变量 8 月前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 8 月前 |