我已经开始学习线程同步。
同步方法:
public class Counter {
private static int count = 0;
public static synchronized int getCount() {
return count;
}
public synchronized setCount(int count) {
this.count = count;
}
}
同步块:
public class Singleton {
private static volatile Singleton _instance;
public static Singleton getInstance() {
if (_instance == null) {
synchronized(Singleton.class) {
if (_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
}
什么时候应该使用synchronized
方法和synchronized
块?
为什么synchronized
块比synchronized
方法更好?
这不是更好的问题,只是有所不同。
同步方法时,实际上是在与对象本身进行同步。对于静态方法,您正在同步到对象的类。因此,以下两段代码以相同的方式执行:
public synchronized int getCount() {
// ...
}
就像您写的一样。
public int getCount() {
synchronized (this) {
// ...
}
}
如果要控制到特定对象的同步,或者只想将方法的 一部分
同步到该对象,则指定一个synchronized
块。如果synchronized
在方法声明上使用关键字,它将使整个方法与对象或类同步。
问题内容: 我正在查看包含同步方法的第三方库中的一些代码,在此方法中,有一个锁定在实例变量上的同步块。与此类似: 这有意义吗?如果是这样,在同步方法中使用同步语句有什么好处? 鉴于同步方法锁定了整个对象,对我来说似乎是多余的。在使用非私有的实例变量时,这种方法是否有意义? 问题答案: 在您的示例中,该方法 同时 锁定了和的实例。其他方法可能仅锁定对象的实例 或 对象。 因此,是的,这完全取决于他们
问题内容: Java中的同步方法和同步块有什么区别? 我一直在网上搜索答案,人们似乎对此不太确定:-( 我的看法是,两者之间没有区别,只是synch块的作用域可能更多,因此锁定的时间更少了? 如果在静态方法上使用Lock,则采用什么Lock?班级锁是什么意思? 问题答案: 同步方法将方法接收器用作锁(即,用于非静态方法,而用于静态方法的封闭类)。 blocks将表达式用作锁。 因此,以下两种方法等
问题内容: 可以说我们有以下两个示例代码: 还有这个 所以有人可以告诉我现在有什么区别吗? 问题答案: 这两种不同的方法在 功能上是等效的 。有 可能 是一个非常小的 性能 差异: 在字节码级别,作为方法访问标记中设置的位, 同步方法 公布其同步需求。JVM查找该位标志并进行适当同步。 该 同步块 通过存储在该方法的类文件中的字节码定义的操作序列实现其同步。 因此,同步方法 可能会以 更快的速度执
问题内容: 之间有什么区别 和 如果我错了,请忽略此问题。 问题答案: 在第一个线程中,只有一个线程一次可以执行整个方法,而在第二个线程中,如果不将 其 用作参数,则只有一个线程可以执行该同步块。 这是它的副本。使用同步方法而不是同步块是否有优势?
请看下面给我带来麻烦的方法: 然后是run方法:
本文向大家介绍请分析一下同步方法和同步代码块的区别是什么?相关面试题,主要包含被问及请分析一下同步方法和同步代码块的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 考察点:JAVA代码块同步 参考回答: 区别:同步方法默认用this或者当前类class对象作为锁; 同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法。