jjzjj

volatility

全部标签

java - 为什么 JPA2 MetaModel 会生成带有 volatile 成员的对象?

我刚刚使用org.apache.openjpa.persistence.meta.AnnotationProcessor6为我的JPA2实体生成元模型。@javax.annotation.Generated(value="org.apache.openjpa.persistence.meta.AnnotationProcessor6",date="TueNov2209:49:03CET2011")publicclassEntity_{publicstaticvolatileSingularAttributeid;publicstaticvolatileSingularAttribute

java - 在同步块(synchronized block)中写入 volatile 数组的必要性

有关JMM的问题以及有关在同步块(synchronizedblock)中写入但未同步读取的volatile字段的语义。在下面代码的初始版本中,我没有同步访问,因为它对于早期的需求来说是不必要的(并且滥用自赋值this.cache=this.cache确保了易变的写入语义)。某些要求已更改,需要同步以确保不会发送重复的更新。我的问题是同步块(synchronizedblock)是否排除了对volatile字段的自赋值?//Cacheofbyte[]databyrowandcolumn.privatevolatilebyte[][][]cache;publicbyte[]getData(i

Java多线程——加入一个CPU繁重的线程和volatile关键字

因此,在一些工作面试之后,我想编写一个小程序来检查i++在Java中是否真的是非原子的,并且在实践中应该添加一些锁定来保护它。事实证明你应该这样做,但这不是这里的问题。所以我在这里写了这个程序只是为了检查一下。问题是,它挂了。似乎主线程卡在t1.join()上行,即使由于上一行中的stop=true,两个工作线程都应该完成。我发现在以下情况下悬挂会停止:我在工作线程中添加了一些打印(如评论中所述),可能导致工作线程有时放弃CPU或如果我将标志booleanstop标记为volatile,导致立即写入被工作线程看到,或者如果我将计数器t标记为volatile...为此,我不知道是什么原因

java - Java 中的 Volatile 关键字

我和我的老师就java中的volatile关键字发生了一点争论。当一个变量声明为volatile时,这样说是否正确:Thevalueofthisvariablewillneverbecachedthread-locally:allreadsandwriteswillgostraighttothe"mainmemory".我的老师的意见是:volatilekeyworddoesnotpromisethevalueofthevariablewillbesavedinthemainmemory.有人可以解决我们的冲突吗?谢谢! 最佳答案

java - volatile 变量是同步的吗? ( java )

假设我有一个私有(private)变量,我有一个setVariable()方法,它是synchronized的,这不是和使用完全一样吗volatile修饰符? 最佳答案 没有。Volatile意味着该变量不缓存在任何每线程缓存中,并且它的值总是在需要时从主内存中检索。同步意味着那些每线程缓存将在某些点保持同步。理论上,如果许多线程需要读取变量的值,但很少更改,则使用volatile变量会带来很大的速度损失。 关于java-volatile变量是同步的吗?(java),我们在StackOv

java - 同步对 Volatile 字段的写入访问(廉价读写 block )

假设我有以下类(class),将大量阅读,但只是偶尔写。它将在多线程网络应用程序中使用,因此需要线程安全:publicclassFoo{privatevolatileStringfoo;publicStringgetFoo(){returnfoo;}publicsynchronizedStringsetFoo(Stringin){this.foo=in;}}Java并发(http://www.ibm.com/developerworks/java/library/j-jtp06197/index.html)声明这是一种脆弱的方式来保护写访问,同时提高读访问。什么是这种模式的更强大的替代

java - 为什么 Volatile 行为异常

我最近遇到了volatile关键字的这种奇怪行为。据我所知,volatile关键字应用于变量以反射(reflect)对数据所做的更改一个线程传递给另一个线程的变量。volatile关键字可防止在线程上缓存数据。我做了一个小测试............我使用了一个名为count的整型变量,并在其上使用了volatile关键字。然后做了2个不同的线程来增加变量值到10000,所以最终结果应该是20000。但情况并非总是如此,使用volatile关键字时,我无法始终获得20000,而是18534、15000等......有时会获得20000。但是当我使用synchronized关键字时,它工

java - 使用volatile和synchronized时flushed或者publish到各个线程的内存范围是多少?

此问题仅针对内存可见性,而不是happens-before和happens-after。Java中有四种方法可以保证一个线程中的内存更改对另一个线程可见。(引用http://gee.cs.oswego.edu/dl/cpj/jmm.html)写入线程释放同步锁,读取线程随后获取同一个同步锁。如果一个字段被声明为volatile,写入它的任何值都会被写入线程刷新并在写入线程执行任何进一步的内存操作之前变得可见(即,为了手头的目的它被立即刷新)。线程第一次访问对象的字段时,它会看到该字段的初始值或其他线程写入后的值。当线程终止时,所有写入的变量都会刷新到主内存。根据JavaConcurre

java - volatile 语句的负载屏障在哪里?

我写了这个简单的Java程序:packagecom.salil.threads;publicclassIncrementClass{staticvolatileintj=0;staticinti=0;publicstaticvoidmain(Stringargs[]){for(inta=0;a这将为i++和j++生成以下反汇编代码(删除剩余的反汇编代码):0x0000000002961a6c:49ba98e8d0d507000000movr10,7d5d0e898h;{oop(a'java/lang/Class'='com/salil/threads/IncrementClass')}

java - volatile 和 synchronized 在一起

是否有任何理由在此代码中同时使用volatile和synchronized?publicclassHelper{privatevolatileintn;privatefinalObjectlock=newObject();publicHelper(intn){this.n=n;}publicvoidsetN(intvalue){synchronized(lock){n=value;}}}类助手必须是线程安全的。我从《JavaConcurrencyGuidelines》一书中得到了这个例子,但还是不清楚:这个例子中为什么要同时使用volatile和synchronized?