问题标签 [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 回答
88 浏览

java - 按照惯例应该是单例的对象需要同步

我希望我的类只有一个实例 Format1 应该通过类引擎返回:

这是否确保通过 getFormat 只返回一个正确的 Format 实例?

此外,调用 getFormat() 的客户端需要在格式对象(绝对没有状态)上执行方法,但将 ByteBuffer 传递给方法(此 ByteBuffer 可能会被修改):

这里/这样的同步构造是否确保可序列化?

PS:我对Java很陌生,据我所知,我也可以使方法同步,但我认为检查(结果== null)也应该包含在关键部分中,所以我决定使用同步(obj ) 构造。如果这是一个愚蠢的问题,请原谅我,但我想确认我的怀疑。

0 投票
2 回答
56 浏览

java - java中的同步块

我遇到了代码:

在哪里Account上课。
是否Account.this意味着任何当前的 Account 类实例?

0 投票
3 回答
2695 浏览

java - Java 中的同步 - Vector vs ArrayList

我试图了解 Vector 和 ArrayList 类在线程安全方面的区别。Vector 应该是内部同步的。它是由每个元素同步的,还是作为一个整体同步的?(我可以想象多个线程可以同时访问向量,但多个线程不能同时访问同一个元素的情况)。如果您查看下面的代码,getAo()则不等于,getV()因为据我所知synchronized,在方法签名中使用的关键字会在包含的类对象( 的实例)上同步。VectorVsArrayList但是,getAoSync()相当于getV()?等同于,我的意思是ao只要对实例变量的所有访问都通过getter方法,就同步而言,实例变量开始表现得像一个Vector对象?

0 投票
1 回答
508 浏览

java - 监控对象在同步块中有什么作用?

经过数小时的阅读,我仍在努力理解监视器对象的确切作用。

演示我的意思:

我将“Demo.kitchen”放在浴室同步块的括号中。如果有人在使用浴室,那么浴室和厨房都被锁定。为什么两个都被锁了?

我猜想:

1)监视器对象本身(在我的例子中是厨房)被锁定到所有线程(在同步块中使用时)

2)如果它们都具有相同的监视器对象(在我的情况下,两个室友的浴室与监视器对象相同),则一次只允许一个线程执行同步块

这是正确的想法还是我错过了什么?

Marko Topolnik,谢谢你的回答。

我想我明白现在发生了什么。

第一个线程 1 (bob) 开始使用浴室并锁定厨房(因为提供了 Demo.kitchen)。当 john 也想使用浴室时,他不能,不是因为浴室被锁定,而是因为他正在检查厨房是否被锁定(鲍勃刚刚锁定它)。而妈妈不能使用厨房,因为那是实际上被锁定的物体。

0 投票
2 回答
1138 浏览

java - 查询可重入锁对同步块的缺点

我正在阅读 java 中可重入锁和同步块之间的比较。我正在浏览互联网上的各种资源。我发现在同步块上使用可重入锁的一个缺点是,在前一个中,您必须显式使用 try finally 块在 finally 块中获取的锁上调用 unlock 方法,因为您的代码的关键部分可能抛出异常会造成很大的麻烦,如果线程不释放锁,而在后一种情况下,JVM本身会负责在发生异常时释放锁。

我不太相信这个缺点,因为使用 try finally 块并不是什么大不了的事。因为我们已经使用它很长时间了(流关闭等)。有人可以告诉我重入锁相对于同步块的其他一些缺点吗?

0 投票
3 回答
734 浏览

java - 对象引用表达式在同步块中是什么意思

有人可以解释一下这里同步块的对象引用表达式是什么意思吗?

像在这里同步块中的资源1在这里做什么?

0 投票
3 回答
3473 浏览

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

我有一个关于单例模式的问题。在单例模式中,我们写

写作的目的是ClassName.class什么?

0 投票
2 回答
56 浏览

java - 两个不同执行块之间的同步器

当检测到客户端登录任务时,消息处理任务应该停止处理新消息。但是,消息处理器应该在暂停之前完成它正在处理的任务。这基本上意味着客户端登录任务应该给消息处理器一个喘息的空间(等待自己),然后才能继续。所以场景是这样的

我的问题是,这两个线程之间是否有任何现成的同步器正在执行不同的路径但必须相互等待?我的理解是循环障碍、信号量、CountDownLatch 在处于相同执行路径的线程之间同步。

编辑-有一个消息处理线程。但是,可以有多个登录线程。

我想到的解决方案是使用可重入锁。所以在处理每条消息之前会发生什么,获取一个锁并且消息处理器检查是否有任何正在进行的客户端登录。AtomicInteger 告诉我正在进行的登录请求数。如果有多个登录请求正在进行,通知处理器等待锁定条件。通知处理器被通知恢复其工作的条件是 AtomicInteger 计数必须降至 0。解决方案的唯一警告是,如果正在处理消息并且登录请求出现在中间,那么登录线程不等待。这就是我需要在客户端登录上的另一个锁定,当消息处理器处理完消息时必须释放它。这使得解决方案过于复杂,我想避免这种不必要的复杂性。任何建议表示赞赏。

0 投票
3 回答
91 浏览

java - 在 Java 中使用同步

有什么区别:

0 投票
3 回答
125 浏览

java - 这段代码不是在临界区违反互斥吗?

我是 Java 新手,并试图了解 Java 中的并发性。在探索时,我在一个非常流行的 Java 并发页面上遇到了这段代码:

我认为这里的函数 next() 违反了互斥,如下所示:

被保存在同步块之外,因此如果某个线程在 add() 或 next() 中修改同步块内的linkedSites,则允许其他线程读取它。

如果我错了,请纠正我。