草庐IT

non-volatile

全部标签

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

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

java - ReentrantReadWriteLock的 "non-fair"模式怎么理解?

ReentrantReadWriteLock有公平和非公平(默认)模式,但是文档太难理解了。我怎么理解呢?如果有一些代码示例来演示它,那就太好了。更新如果我有一个写线程和很多读线程,哪种模式更好用?如果我使用非公平模式,写线程是否有可能获得锁的机会很小? 最佳答案 非公平是指当锁准备被新线程获取时,该锁不保证谁获取锁的公平性(假设有多个线程请求锁当时)。换句话说,可以想象一个线程可能会一直处于饥饿状态,因为其他线程总是设法任意获取锁而不是它。公平模式更像是先到先得,其中保证线程在某种程度上公平,它们将以公平的方式获得锁(例如,在开始

java - ORA-24816 : Expanded non LONG bind data supplied after actual LONG or LOB column

我在Hibernate中更新表时出现以下异常ORA-24816:在实际LONG或LOB列之后提供的扩展非LONG绑定(bind)数据我也提取了sql查询,看起来像Updatetable_namesetcolumnName(LOB)=value,colmun2(Stringwith4000)=valuewhereid=?;实体类classTest{@LobprivateStringerrorText;@Column(length=4000)privateStringtext;}请帮帮我,这是哪里出了问题谢谢拉维·库马尔 最佳答案 运行

java - JBoss 中的 "javax.servlet.ServletException: non-HTTP request or response"

我的jboss在尝试运行我的应用程序(springmvc)时抛出无法描述的错误。它部署正常,这个异常没有告诉我任何有用的信息,所以我真的不知道该怎么做。我无法调试,真的什么也做不了:13:00:01,262INFO[ServerImpl]JBoss(Microcontainer)[5.1.0.GA(build:SVNTag=JBoss_5_1_0_GAdate=200905221053)]Startedin2m:13s:790ms**Startedsuccessfully**Whilerunningtheapplicationfromthebrowserthishappens:13:0

java -//$NON-NLS-后面的数字是什么意思

这是一个跟进问题:Whatdoes$NON-NLS-1$mean?我注意到,当您使用任何数字时,评论标签将被识别为NLS标签。但是,似乎只有数字1才能正确修复警告。(无声警告vs.无声警告+不必要的nls标签)这样做的目的是什么? 最佳答案 $NON-NLS-之后的数字表示该标记适用于标记行上的哪个字符串。数字1适合您,可能是因为您尝试标记的行上只有1个字符串。如果同一行有2个字符串,例如,您可以使用$NON-NLS-2$标记第二个字符串。//Warningon"baz"foo("bar","baz");//$NON-NLS-1$/

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 : non-static variable cannot be referenced from a static context Error

以下代码在变量con2上生成错误,提示“无法从静态上下文错误中引用非静态变量con2。”我在Google上搜索了一个解决方案他们建议变量尚未初始化以使方法可用。我是否错误地初始化了它?我也尝试过将内容更改为公开,但这也无济于事。importjava.io.*;importjava.net.*;importjava.sql.*;importjava.sql.CallableStatement;importjava.sql.ResultSet;importjava.sql.PreparedStatement;importnet.sourceforge.jtds.jdbcx.JtdsData

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')}