猿问
使用同步方法而不是同步块有好处吗?
使用同步方法而不是同步块有好处吗?
有谁能通过一个例子告诉我同步方法相对于同步块的优势?
红颜莎娜
浏览 478
回答 3
3回答
一只萌萌小番薯
有人能通过一个例子告诉我同步方法相对于同步块的优势吗?谢谢。在块上使用同步方法没有明显的优势。也许唯一的一个(但我不认为它是一个优势)是您不需要包含对象引用this.方法:public synchronized void method() { // blocks "this" from here.... ... ... ...} // to here区块:public void method() { synchronized( this ) { // blocks "this" from here .... .... .... .... } // to here...}看见?一点好处都没有。砌块做但是,与方法相比,它具有优势,主要是在灵活性方面,因为您可以使用另一个对象作为锁,而同步则会锁定整个对象。比较:// locks the whole object... private synchronized void someInputRelatedWork() { ... }private synchronized void someOutputRelatedWork() { ... }v.V.// Using specific locksObject inputLock = new Object();Object outputLock = new Object();private void someInputRelatedWork() { synchronized(inputLock) { ... } }private void someOutputRelatedWork() { synchronized(outputLock) { ... }}此外,如果方法增长,仍然可以将同步部分分开: private void method() { ... code here ... code here ... code here synchronized( lock ) { ... very few lines of code here } ... code here ... code here ... code here ... code here}
0
0
0
芜湖不芜
唯一真正的区别是同步块可以选择它在哪个对象上进行同步。同步方法只能使用'this'(或同步类方法的相应类实例)。例如,它们在语义上是等价的:synchronized void foo() { ...}void foo() { synchronized (this) { ... }}后者更灵活,因为它可以竞争任何对象,通常是成员变量。它也更细化,因为您可以让并发代码在块之前和之后执行,但仍然在方法中执行。当然,通过将并发代码重构为单独的非同步方法,您也可以轻松地使用同步方法。使用任何使代码更容易理解的方法。
0
0
0
蛊毒传说
同步法优点:IDE可以指示同步方法。语法更加简洁。强制将同步块拆分为单独的方法。缺点:同步到这一点,从而使局外人也有可能同步到它。将代码移出同步块的难度更大。同步块优点:允许对锁使用私有变量,从而迫使锁留在类中。通过搜索对变量的引用可以找到同步块。缺点:语法更复杂,因此代码更难阅读。就我个人而言,比起需要同步的东西,我更喜欢使用只关注于类的同步方法。这样的类应该尽可能小,因此检查同步应该很容易。其他人不需要关心同步。
0
0
0
随时随地看视频
慕课网APP
相关分类
Java
我要回答