问题标签 [synchronized-block]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
87 浏览

java - 以下从某些队列实现中检索整数值的代码是否正确

我正在从互联网上阅读一些东西。这是关于下面代码的问题。以下从某个队列实现中检索整数值的代码是否正确?答案是这样的:

尽管上面的代码使用队列作为对象监视器,但它在多线程环境中的行为并不正确。这样做的原因是它有两个独立的同步块。当两个线程在第 6 行被另一个调用 notifyAll() 的线程唤醒时,两个线程一个接一个地进入第二个同步块。在第二个块中,队列现在只有一个新值,因此第二个线程将轮询一个空队列并获取 null 作为返回值。

我在想同步块会阻止不同的线程同时访问这个资源,不是吗?谢谢你。

0 投票
2 回答
162 浏览

java - Java同步块是否与“this”和方法参数一样工作?

如果在同步块中使用方法参数而不是this关键字,Java 同步的行为方式。

对比

净效果会一样吗?

0 投票
3 回答
17542 浏览

java - 将参数传递给同步块的目的是什么?

我知道

当您同步一段代码时,您指定要使用哪个对象的锁作为锁,例如,您可以使用一些第三方对象作为这段代码的锁。这使您能够在单个对象中拥有多个用于代码同步的锁。

但是,我不明白需要将参数传递给块。因为我是否将字符串的实例传递给同步块并不重要,因为同步块可以完美地工作,而与传递给块的参数无关。

所以我的问题是,无论如何,同步块是否会阻止两个线程同时进入临界区。那么为什么需要传递参数。(我的意思是默认获取某个随机对象的锁定)。

我希望我正确地提出了我的问题。

我已经尝试了以下示例,其中随机参数是同步块。

使用非静态同步块:

使用静态同步块:

0 投票
1 回答
487 浏览

java - 使用 ReentrantLock 而不是同步的好处

我发现使用 ReentrantLock 而不是同步的另一个好处

下面的代码显示即使在临界区锁被释放时发生异常(使用 ReentrantLock )

现在通过使用同步

通过比较这两个代码,我发现使用同步块还有一个缺点,即如果在关键部分发生异常,则无法释放锁。

我对吗 ?

如果我错了,请纠正我。

如果同步块中发生异常,是否有释放锁?

0 投票
0 回答
197 浏览

objective-c - Objective-C 中的嵌套同步块

我在某处阅读了使用多个相同同步块的代码,如下所示:

以这种方式对 self 和 var 进行嵌套同步的原因是什么?单独在 var 上的 @synchronized 还不够吗?

0 投票
2 回答
460 浏览

java - 可重入同步 - 调用同步方法的解锁

第一次在调用同步方法 2 的方法 1 中获得锁,第二次获得相同的锁。

现在我的疑问是,当同步块在 method2() 结束时,第一次在这里发生解锁并返回到 method1() 的同步块,第二次再次解锁。

它是否像 ReentrantLock 那样在内部管理锁的数量?

0 投票
5 回答
11856 浏览

android - 拒绝类,因为它未能通过 Android 编译时验证

我的一个应用程序在启动时突然失败,并显示以下错误消息:

java.lang.VerifyError:拒绝类 com.sample.BufferManagerImpl,因为它未能通过编译时验证(“com.sample.BufferManagerImpl”的声明出现在 /data/app/com.sample.myapp-1/base.apk 中)

它只在使用 ART 虚拟机的设备上失败,但在 Dalvik 上没有

0 投票
2 回答
3679 浏览

java - 在同步的代码块中调用 java timer

如果我有一个名为 A 的父代码块,则 A 是同步的。在 A 中,我执行了一个名为 B 的子代码块。我是否可以假设 B 也将同步?


如果在 AI 中有一个计时器可以在某个 t 时间内延迟 B 的执行,那么当 A 已经完成时,B 是否有可能稍后执行?


非常感谢。


P/S:对不起,不清楚的代码,这应该是它的样子

0 投票
4 回答
3154 浏览

java - 同步(this)是否仅锁定同步块或所有“this”代码?

如果我将运行几个线程,其中一些调用静态函数getCount(),其中一些创建新实例。我想在每次调用时访问getCount()实际实例数。

  1. 代码中的两个选项有区别吗?
  2. 如果我锁定“ this”不应该意味着在构造函数退出同步块之前我不能调用getCount()(假设我不在 getCount() 上写同步)。
  3. 如果我在代码中的某个位置执行同步块,它是只锁定同步块还是锁定所有“ this”代码?
  4. 从这里开始编辑:谢谢大家,这非常有帮助,但是在您的回答之后我还有一些问题。
  5. 如果我理解正确, synchronized(this) 块不会影响(或连接到)静态同步函数(在锁定术语中不是 numOfInstances 增量)?
  6. 是否有更好的选择来使增量和 getCount() 函数线程安全?(比如打开一个静态对象并做 synchronized(obj) 而不是 synchronized(this) - 朋友建议)。
  7. 如果我在 ObjectCounter 类中有一个 f1() 方法(非静态),而一个线程在 synchronized(this) 中,其他线程可以进入 f1() 块(不是同步类或内部有同步块)吗?
  8. 如果我在 ObjectCounter 中有 f1() 方法(非静态)和 f2() 方法(非静态),则在 f1() 中我有 synchronized(this) 块。当一个线程在 synchronized(this) 块中时,其他线程可以进入 f1() 块(不是同步类或内部有同步块)吗?(假设两个线程在同一个实例上“工作”)

`

0 投票
1 回答
82 浏览

java - 最新的 JMM 是否指定同步块对其他线程是原子的,甚至是异步的?

当我在http://www.javaworld.com/article/2074979/java-concurrency/double-checked-locking--clever--but-broken.html上浏览一篇关于 DOUBLE-CHECKED LOCKING 的文章时 ,我遇到了一条评论它说“应该注意的是,实际上 DCL 可能在某些 JVM 的某些版本上工作——因为很少有 JVM 真正正确地实现了 JMM。”所以我从中推断 JMM 指定同步块是原子的,甚至是块在其他线程中不同步。我对吗?(我尝试阅读oracle网站上的JMM,但是太抽象了,我放弃了。)