在这个问题的启发下,我写出了测试题:
public class Main {
private static final long TEST_NUMBERS = 5L;
private static final long ITERATION_NUMBER = 100000L;
private static long value;
public static void main(final String [] args) throws Throwable {
for(int i=0; i<TEST_NUMBERS; i++) {
value = 0;
final Thread incrementor = new Thread(new Incrementor());
final Thread checker = new Thread(new Checker());
incrementer.start();
checker.start();
checker.join();
incrementer.join();
}
}
static class Incrementor implements Runnable {
public void run() {
for(int i=0; i<ITERATION_NUMBER; i++){
++value;
}
}
}
static class Checker implements Runnable {
public void run() {
long nonEqualsCount = 0;
for(int i=0; i<ITERATION_NUMBER; i++){
if(value != value) {
++nonEqualsCount;
}
}
System.out.println("nonEqualsCount = " + nonEqualsCount);
}
}
}
本程序以普通大小写形式打印:
nonEqualsCount = 12; //or other non 0 value;
nonEqualsCount = 0;
nonEqualsCount = 0;
nonEqualsCount = 0;
nonEqualsCount = 0;
首先:我解释这种行为是JIT编译器的存在。“预热”后,每个线程的JIT编译器缓存值非volatile
字段。对吧?
第二:如果先对或不对,我如何验证这一点?
附注。-我知道打印-选项。
更新:enviroment:Windows 7 64bit,JDK 1.7.0_40-b43(热点)。
您看到的可能是JIT的工件。在它开始执行之前,对Java字节代码进行解释,这意味着在比较过程中checker线程很有可能被中断。
此外,由于执行的代码更多,需要刷新CPU缓存的几率更高。
当代码被JIT优化时,它可能会插入64位的操作,而且由于只执行少量代码,缓存将不再被刷新到主内存中,这意味着线程没有机会看到另一个线程所做的更改。
我对编程很陌生,我已经自学了将近一个月了,有谁能给我解释一下我代码中错误的原因吗?在“Total(moneyConv(moneySum*moneyRate))”中出错。行,表示实际和形式的论点在长度上是不同的。我检查了我所有的参数,我觉得很好。多谢!
问题内容: DataflowAnomalyAnalysis:找到变量“ variable”(行“ n1”-“ n2”)的“ DD”异常。 DataflowAnomalyAnalysis:找到变量“ variable”(行“ n1”-“ n2”)的“ DU”异常。 DD和DU听起来很熟悉…我想在涉及最差的前后条件的测试和分析中说些什么,但我不记得具体情况。 NullAssignment:将Objec
本文向大家介绍为什么Node.js会这么火呢?Node.js流行的原因,包括了为什么Node.js会这么火呢?Node.js流行的原因的使用技巧和注意事项,需要的朋友参考一下 Node.js是一项服务器技术,它用来构建和运行Web应用,这和ASP.NET,Ruby on Rails或Spring框架做的工作是类似 的。它使用JavaScript作为主要的开发语言,有一个自带的轻量级Web服务器,还
问题内容: 我偶然发现了这一点: 抛出一个。现在,我知道为什么会发生这种情况(在此作用域之后,是受约束的,因此在整个作用域中被认为是局部的)。 在这种情况下: 这很有道理。但是第一种情况具有直观的逻辑,这意味着: 我想这是有原因的,为什么不允许“直观”版本,但这是什么?尽管这可能是“显式比隐式更好”的情况,但总是对我摸索总是觉得不干净。 从一个角度来看,发生在我身上的实际情况是我不得不改变一下别人
问题内容: 在回答这个问题时,我和其他一些人实际上认为是错误的,因为认为以下方法可行: 说一个有 背后的原因是什么 而有一个 要么 要么 是造成尺寸 退化的 原因吗? 问题答案: 是对象dtype的2D数组,每行的第一个元素是一个列表。 是对象dtype的一维数组,其每个元素都是列表。 当您这样做时,NumPy不会对list的每个元素进行元素比较。它从中创建尽可能高维的数组,生成1D数组,然后广播
下面我写了一个C++函数,它通过一个整数向量进行循环。每通过一次,它就从所有的数字中减去最小的数字。它应该在每次传递时返回非零元素的数量(这存储在向量结果中并返回)。然而,每当我尝试运行时,我都会得到“std::bad_alloc”。当删除行“flag=true”时,错误就会消失。我将需要它工作,以便while循环中断。帮我修好这个。