这可能是一个重复的问题,但我在一本关于并发的书中找到了这部分代码.这据说是线程安全的:
ConcurrentHashMap<String, Integer> counts = new ...;
private void countThing(String thing) {
while (true) {
Integer currentCount = counts.get(thing);
if (currentCount == null) {
if (counts.putIfAbsent(thing, 1) == null)
break;
} else if (counts.replace(thing, currentCount, currentCount + 1)) {
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
从我的(并发初学者)的角度来看,线程t1和线程t2都可以读取currentCount = 1.然后两个线程都可以将地图的值更改为2.有人可以解释我代码是否正常?
java concurrency multithreading concurrenthashmap concurrent-programming
Sbt docs说
要仅启用分叉运行任务,请在运行范围中将fork设置为true.
fork in run:= true
但是当我用sbt run(或打开sbt控制台然后运行)运行我的应用程序时,我在任务管理器中看不到另一个进程.当我设置时也是同样的情况fork := true......
test例如,当我运行任务时,情况并非如此.不应该为我的应用程序创建另一个JVM进程或者什么?我错过了什么吗?
我有一个 scala3.0.0-RC1项目,我正在尝试升级到 scala 3.0.0。
我将 sbt 版本设置为1.5.2,scalaVersion := "3.0.0"但出现此错误:
[warn] Note: Unresolved dependencies path:
[error] sbt.librarymanagement.ResolveException: Error downloading org.scala-lang:scala3-library_3.0.0:3.0.
Run Code Online (Sandbox Code Playgroud)