草庐IT

non-volatile

全部标签

java - 一个线程中对非 volatile 成员变量的赋值是否保证在另一个线程中可见?

考虑下面的Java示例。请注意,两个类成员变量都未声明为volatile。如果我正确理解内存模型和“先于发生”规则,Java实现可以优化run()方法,使其永远运行,即使另一个线程调用stopNow()方法。发生这种情况是因为run()方法中没有任何内容强制线程多次读取stop的值。那是对的吗?如果不是,为什么不呢?classExampleimplementsRunnable{booleanstop=false;intvalue=0;publicvoidstopNow(){stop=true;}publicintgetValue(){returnvalue;}@Overridepubl

Java 任务控制显示 "Flightrecorder is not supported for non hotspot jvms"

当我试图通过运行JavaMissionControl(jmc)来分析我的本地Java应用程序时,我无法连接到该应用程序。它在左侧Pane中显示的所有JVM进程的描述中显示“非热点JVM不支持Flightrecorder”。我的环境:Windows7,Java8u25因为我无法在网上的任何地方找到这个问题的解决方案,所以我想与将来可能遇到同样问题的其他人(以及我future的自己)分享我幸运地发现的解决方案。 最佳答案 我在这里发布解决方案和导致解决方案的观察结果。当我(碰巧)尝试运行jvisualvm时,它显示错误“无法监视本地Ja

java,线程何时(以及多长时间)可以缓存非 volatile 变量的值?

来自这篇文章:http://www.javamex.com/tutorials/synchronization_volatile_typical_use.shtmlpublicclassStoppableTaskextendsThread{privatevolatilebooleanpleaseStop;publicvoidrun(){while(!pleaseStop){//dosomestuff...}}publicvoidtellMeToStop(){pleaseStop=true;}}Ifthevariablewerenotdeclaredvolatile(andwithout

Java8 Effectively Final compile time error on non final variable

我正在尝试将java8forEach循环中的boolean变量更改为非最终的true。但我收到以下错误:在封闭范围内定义的局部变量必须是最终的或实际上是最终的。如何解决这个错误?代码:booleanrequired=false;这是我在函数中创建的变量。现在当我试图改变它时:map.forEach((key,value)->{System.out.println("Key:"+key+"Value:"+value);required=true;});我收到错误:在封闭范围内定义的局部变量必须是最终的或实际上是最终的。为什么会出现这个错误,如何解决? 最佳答案

java - 混合 volatile 和 synchronized 作为读写锁

考虑一个原始类型变量,有很多线程读取和一些线程写入,下面的代码能正常工作吗?如果会,它提供的性能是否优于1)。在所有方法上声明同步;2).使用显式ReadWriteLock?这是一个常见的模式吗?如果不是,这种情况通常使用什么模式?目前这对我来说效果很好,但我觉得同时使用volatile和synchronized有点多余。privatevolatileintvalue=1;publicvoidfunc1(){if(value==1){//dosomething}}publicvoidfunc2(){if(value==2){//dosomething}}publicvoidfunc3(

java - volatile + 不可变持有者对象 = 线程安全?

我有一个来自“javaconcurrencypratique”一书的例子,他说volatile和不可变的持有者对象提供了线程安全性。但是我不明白书上给出的例子。代码如下:publicclassVolatileCachedFactorizerextendsGenericServletimplementsServlet{privatevolatileOneValueCachecache=newOneValueCache(null,null);publicvoidservice(ServletRequestreq,ServletResponseresp){BigIntegeri=extrac

java - Spring 3.1 : Non-XML equivalent of annotation-driven transaction management

什么是非XML(在@Configuration中)等同于在Spring3.1中? 最佳答案 Spring3.1有@EnableTransactionManagement用于此目的的注释。 关于java-Spring3.1:Non-XMLequivalentofannotation-driventransactionmanagement,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions

java - 断言集合 "Contains at least one non-null element"

我想验证一个集合是否包含至少一个非空元素。我试过is(not(empty())),但是这在下面的测试中通过了。importorg.junit.Test;importjava.util.ArrayList;importjava.util.Collection;importstaticorg.hamcrest.CoreMatchers.is;importstaticorg.hamcrest.MatcherAssert.assertThat;importstaticorg.hamcrest.Matchers.empty;importstaticorg.hamcrest.Matchers.no

java - JIT 是这种行为的原因吗?

受此启发question,我写了测试:publicclassMain{privatestaticfinallongTEST_NUMBERS=5L;privatestaticfinallongITERATION_NUMBER=100000L;privatestaticlongvalue;publicstaticvoidmain(finalString[]args)throwsThrowable{for(inti=0;i这个程序在普通情况下被打印出来:nonEqualsCount=12;//orothernon0value;nonEqualsCount=0;nonEqualsCount=0

java - Java中如何正确使用volatile

我正在研究JavaThread,当我分析以下修改自Example8.3.1.4的代码时,关键字volatile让我感到困惑publicclassVolatile{publicstaticvoidmain(String[]args){MyRunnable1myRunnable1=newMyRunnable1();MyRunnable2myRunnable2=newMyRunnable2();Threadt1=newThread(myRunnable1);Threadt2=newThread(myRunnable2);t1.start();t2.start();}}classMyRunna