我正在用Java编写一个程序,使一些汽车相互竞争。每辆车都是单独的线程。
当汽车完成比赛时,每个人都会调用此方法。我已经在不同的计时器速度下测试了该方法,并且看起来效果很好。但是我确实意识到每个线程都在访问变量carsComplete,有时恰好在同一时间(至少在date命令给我的范围内)。
所以我的问题是:这个方法是线程安全的吗?
public static String completeRace()
{
Date accessDate = new Date();
System.out.println("Cars Complete: " + carsComplete + " Accessed at " + accessDate.toString());
switch(++carsComplete)
{
case 1: return "1st";
case 2: return "2nd";
case 3: return "3rd";
default: return carsComplete + "th";
}
}
不,您应该使用java.util.concurrent.atomic.AtomicInteger
。看看它的getAndIncrement()
方法。
问题内容: 我发现以下Java代码。 其中,和是。 我知道基本类型的基本操作是线程安全的,但是我不确定。如果上述是必要的,是否可能有更好的类来处理这种操作? 问题答案: 否。该操作不是线程安全的。对于涉及分配给共享字段或数组元素的任何表达式,它要求锁定和/或适当的“先于”关系链是线程安全的。 (在字段声明为的情况下,“先发生”关系存在…但是仅在读和写操作上存在。该操作由一个读和一个写操作组成。它们
问题内容: 我想创建一个非线程安全的代码块进行实验,这些是2个线程将要调用的函数。 此代码线程安全吗? 如果不是,我可以理解为什么它不是线程安全的,以及通常使用哪种语句导致非线程安全的操作。 如果它是线程安全的,如何使它显式地成为非线程安全的? 问题答案: 由于有GIL,单个操作码是线程安全的,但除此之外: *多个线程共享的 *每个 资源都 必须 有一个锁。
本文向大家介绍什么是JavaScript中的增量(++)运算符?,包括了什么是JavaScript中的增量(++)运算符?的使用技巧和注意事项,需要的朋友参考一下 增量运算符将整数值加1。这是一个示例,其中使用递增运算符两次将a的值递增两次 示例
增量运算符++将1添加到其操作数,减量运算符 - 从其操作数中减去1。 因此 - x = x+1; is the same as x++; 同样 - x = x-1; is the same as x--; 递增和递减运算符都可以在操作数之前(前缀)或后跟(后缀)。 例如 - x = x+1; can be written as ++x; // prefix form 或者 - x++; /
问题内容: 这篇文章说,相当于 假设我有以下代码: 假设beginmt在MultiThreading类的单个实例上同时运行多次(线程号为1至15500)。是否可能存在这样的实例,它可以打印以下内容,即某些线程号丢失并且某些数字加倍? 编辑: 可以肯定地说+运算符不会引起某些不安全的发布问题吗?我认为StringBuilder可以优化为类似于实例变量的东西,在这种情况下,它可能会不安全地发布。 编辑
所以这可能是一个愚蠢的问题,但我时不时地遇到这种语法错误,似乎无法吸取教训-因为我根本不明白为什么这不起作用。 由于某种原因,三元运算符不能处理增量或减量。 在控制台中,我发现了这些结果: 在搜索答案时,我发现另一个用户对意外行为有同样的体验。 经过更多的搜索,我发现前增量工作正常: 在试图确定预增量的工作原理时,遇到了这个答案。 这让我明白了为什么它能工作,而后增量不能。我想,如果三进制的操作顺