问题标签 [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 投票
0 回答
1284 浏览

rx-java2 - RxJava - 同步块 - 内部源

我想使用同步块作为 flatMap 的来源。但是我需要使用这个构造来处理(方法 processItem),而不仅仅是在创建内部源时。

这个 Observable 每 5 分钟调用一次(例如 Observable.interval)

我的 processesItem 方法如下所示:

两种内部方法都返回 Single。

它是从服务器定期更新的方法的一部分。我需要使用从其他项目类调用的用于修改项目(更新、删除)的方法(与项目同步)来序列化 processItem 方法调用(从服务器定期同步项目)。

主要问题是定期更新可以重写新更新的项目。

实际上我使用这个解决方案:

更新新项目的链:

定期更新链:

我知道这不是明确的 RxJava 解决方案。

你知道这个问题的更好解决方案吗?

0 投票
3 回答
546 浏览

java - 为什么我的同步方法不能正常工作?

我有这个打印计数器的同步方法,我有 4 个线程,所以我希望我的计数器的最终值为 400000,因为我的计数器是一个静态变量。

但是每次我运行我的代码时,它都会给我不同的计数器值。

以下是我的代码:

0 投票
1 回答
285 浏览

java - AtomicInteger 与同步块

我有一个问题,我需要同步访问java中的整数数组。我的代码看起来像这样。

目前我正在使用单锁来同步对整数数组的访问。但我想为每个计数器使用一个锁。

所以我将代码修改为如下所示。

但是我的同事建议我使用 AtomicInteger 而不是同步块。

AtomicInteger 是否与同步块具有相同的效果?

0 投票
2 回答
497 浏览

java - 在java中使用这个关键字和同步块

我有两个线程可以访问一个对象。使用同步(a),我在对象a上提供锁,所以现在每次线程都可以访问对象“a”并修改它。如果执行此代码,我们有1 2。有时没有同步块我们得到2 2。(线程 t1 得到 i 并增加 i 现在线程 t2 得到 i 并增加然后线程 t1 得到 i 并打印 2,线程 t2 也得到 i 并打印 2)如果我是真的为什么我们不能使用同步(这个)而不是同步(一个)?

0 投票
1 回答
54 浏览

java - 为什么不同线程两次输入了“同步(锁定)”?

在这个简单的例子中,我有两个synchronized (theLock)由不同的线程访问

为什么新创建的线程可以访问synchronized (theLock)section里面?据我了解,theLock已经被主线程获取,新的应该永远阻塞。相反,我看到它也进入了synchronized

这是一个输出

0 投票
1 回答
91 浏览

java - 如果我们在双重检查单例模式中只使用外部空检查怎么办?

问题 1:为什么在多线程的单例模式中我们需要两个空值检查?如果我们只使用外部检查怎么办?

问题2:以下有什么区别:

1:直接使用synchronized()里面的类名

2:在 synchronized() 中使用静态最终对象

3:在 synchronized() 中使用new Object( )

0 投票
2 回答
160 浏览

java - 从方法返回的同步代码中的对象

我想要一个同步块,其中要同步的对象是从方法调用返回的:

是否假设“someGetMethod”已同步或仅“//同步块”部分?

先感谢您

编辑:我有一个集合(要锁定的对象映射)。“someGetMethod”检查对象是否存在于地图上,如果没有,它将添加并返回它以便被锁定。从下面的答案中,我了解到“someGetMethod”可以返回一个已经在 Map 上的值,但是在进入同步块之前,切换到另一个线程,这可能会删除上述值。结果,另一个线程可能通过“someGetMethod”进行相同的检查,现在得到不同的结果。所以看来我应该从同步块中删除,有更好的选择吗?

Edit2:谢谢大家的帮助。我发现了一个类似的问题 - Java synchronized block using method call to get synch object

0 投票
1 回答
36 浏览

java - 同步块锁定在类

在下面的生产者和消费者代码中,我认为生产()和消费()方法在类锁(Processor.class)上是同步的,但是我收到一个异常说明 IllegalMonitorStateException,它发生在我们不使用的对象上t 获取锁,但我们通知该对象。

谁能告诉我我在程序中哪里出错了。

0 投票
1 回答
81 浏览

java - 在java中使用线程的死锁情况?

我创建了 3 个类,

  1. 类 InCharge - 应检查当前余额,同时检查Client线程应wait()直到InCharge线程完成测试(15 秒)
  2. 类客户端 - 应该每 5 秒取款,但是当InCharge线程运行Client线程应该等到InCharge线程说Notify()
  3. 类银行 - 持有当前余额,并锁定Synchronized块。

根据我的调试,它似乎是InCharge发送Notify()但由于某种原因客户端没有收到通知,我猜问题是因为while(true),但我想不出解决它的方法。

你能帮忙找出问题吗?

主要的:

银行:

客户:

负责:

0 投票
2 回答
85 浏览

java - 为什么运行以下代码后 count1 < count2?count1 和 count2 都应该是 2000000

在JDK11中编译运行,看看结果。sum1 是同步代码所用的时间,而 sum2 是 AtomicInteger 代码所用的时间。count1 是对同步 count++ 的调用次数进行计数的结果。count2 是相同数量的组合调用,但使用 AtomicInteger。计数应为 2000000,并且预计 sum1 > sum2 以 ms 为单位。但是,count1 明显减少了,那么电话会去哪里呢?

github