synchronized-block相关内容

在 lockObject 上同步和使用 this 作为锁有什么区别?

我知道同步方法和同步块之间的区别,但我不确定同步块部分. 假设我有这个代码 class 测试 {私有整数 x=0;私有对象 lockObject = new Object();公共无效incBlock(){同步(锁定对象){x++;}System.out.println("x="+x);}public void incThis() {//与同步方法相同同步(这个){x++;}System. ..
发布时间:2021-12-28 22:33:49 Java开发

Java用不同的方法同步同一对象上的块

我试图理解Java中同步块的概念.从我阅读的文件中,我了解到,如果我们获得一个锁(使用实例变量的同步块),然后我们无法在该类中的同一对象上获取同步锁.但当我尝试使用以下代码片段时,我发现理解是错误的. 即我能够获得锁(同一实例变量上的同步块)在两个不同的位置方法同时进行.当线程启动时,它将运行方法并无限期地等待,并且不会脱离同步堵塞.同时如果我使用相同的方法调用stop方法线程进入同步块并执 ..

我们为什么要写Synchronized(ClassName.class)

我对单例模式有疑问. 在单例模式中,我们编写 synchronized(ClassName.class){ // other code goes here } 编写ClassName.class的目的是什么? 解决方案 在成员方法(非静态)中,您可以选择使用哪个监视器(锁定)两个选择:" this "和" 我班级的单个静态锁 ". 如果您要协调对象实例上的锁, ..
发布时间:2020-07-25 23:13:49 Java开发

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

我的一个应用程序在启动时突然失败,并显示以下错误消息: java.lang.VerifyError:拒绝类 com.sample.BufferManagerImpl,因为它失败了 编译时验证(声明 'com.sample.BufferManagerImpl'出现在 /data/app/com.sample.myapp-1/base.apk) 它只会在使用ART虚拟机的设备上失败,而不会 ..
发布时间:2020-07-25 23:13:42 移动开发

Java同步和集合

如果同步的代码块包含未同步的集合.集合是否被认为是线程安全的?如果没有,您能否提供两个线程可能无法安全地访问同步代码中的集合的任何实际情况? 谢谢. 解决方案 仅当访问集合的所有代码都已同步并且它们使用相同的“对象"对其进行同步时. 例如,下面的代码将不会同步,因为它们已同步到不同的对象. public class Foo { private final Coll ..

简化Java中的同步块

围绕Java中的同步块的概念,我遇到了一些麻烦.我觉得我对同步方法已经足够了解.因此,我想到了一个类比来帮助我从同步方法的角度理解同步块.请让我知道我建议的对等是否正确.另外,我现在仅针对非静态同步块提到了这一点.但是,也欢迎使用静态同步块上的点. public void method() { //code snipppet A synchronized(objRef) { ..
发布时间:2020-05-14 00:13:51 Java开发

Java中的同步方法和同步块有什么区别?

Java中的同步方法和同步块有什么区别? 我一直在网上搜索答案,人们似乎对此不太确定:-( 我认为两者之间没有区别,只是synch块的作用域可能更局限,因此锁定的时间更短?? 在使用静态方法锁定的情况下,采用什么锁定?班级锁定是什么意思? 解决方案 同步方法将方法接收器用作锁(例如,对于非静态方法,为this;对于静态方法,则为封闭类). Synchronized块将表达 ..

AtomicBoolean vs synchronized块

我试图通过用 AtomicBoolean 替换一些 synchronized 块来减少代码中的线程争用。 以下是已同步的示例: public void toggleCondition(){ synchronized(this.mutex){ if(this.toggled){ return; } this.toggled = true; //做其他事情 } } ..
发布时间:2018-12-28 23:02:52 Java开发

如果我们正在同步读取,我们是否需要同步写入?

我对同步块几乎没有疑问。 在我提出问题之前,我想与其他相关帖子回答相关问题的链接分享答案。我从同一个答案中引用 Peter Lawrey 。 synchronized确保您拥有一致的数据视图。这意味着您将读取最新值,其他缓存将获得 最新值。缓存很聪明,可以通过 特殊总线相互通信(不是JLS要求的,但允许的话)这个 总线意味着它不需要触摸主内存来获得 一致视图。 如果只使用sy ..
发布时间:2018-12-20 01:43:13 Java开发

将参数传递给synchronized块的目的是什么?

我知道 当你同步一段代码时,你要指定你想要使用哪个对象的锁 锁,所以你可以,例如,使用一些 第三方对象作为这段代码的锁。这给你 能够在 a单个对象中拥有多个锁定代码同步。 但是,我不明白需要将参数传递给块。因为我是否传递String的实例并不重要,无论传递给块的参数如何,一些随机类的实例作为同步块的同步块都能正常工作。 所以我的问题是如果反正同步阻止两个线程同时进入临界区 ..
发布时间:2018-12-10 21:21:53 Java开发

同步块无法正常工作

此练习直接来自SCJP,由Kathy Seirra和Bert Bates提供 同步一段代码 在本练习中,我们将尝试同步一段代码。在该代码块中,我们将获得对象的锁定,以便其他线程在代码块执行时无法修改它。我们将创建三个线程,它们都将尝试操作同一个对象。每个线程将输出一个单个字母100次,然后将该字母递增1。我们将使用的对象是StringBuffer。 我们可以在String对象上进 ..
发布时间:2018-12-07 18:04:47 Java开发

Java中的并发性使用同步块不能提供预期的结果

下面是一个简单的java程序。它有一个称为“cnt”的计数器,递增,然后添加到名为“监视器”的列表。 “cnt”由多个线程增加,并且值被多个线程添加到“monitor”。 在方法“go monitor.size()应该有相同的值,但他们不。 如果您通过取消注释一个注释的同步块并注释掉当前未注释的代码来更改代码,产生预期结果。此外,如果您将线程计数(THREAD_COUNT)设置为1,代 ..