草庐IT

volatile-ttl

全部标签

java - 在没有同步的情况下使用 volatile

知道Readsandwritesareatomicforallvariablesdeclaredvolatile问题1:这个是不是可以这样理解privatevolatileintx=0;x++;操作是原子的?还有那个Markingvariablevolatiledoesnoteliminateallneedtosynchronizeatomicactions,becausememoryconsistencyerrorsarestillpossible.问题2:我想知道在什么情况下(如果有的话)可能会看到标记为volatile的变量而看不到标记为同步的block的任何方法(试图访问/修改

Java 线程 : Should all shared variables be Volatile ?

这个问题在这里已经有了答案:Javavolatilemodifierandsynchronizedblocks(3个答案)关闭5年前。我想了解多线程在Java中是如何工作的。我了解Volatile和Synchronization之间的区别。Volatile与可见性有关,不保证同步。当我们使用多线程环境时,每个线程都会在它们正在处理的变量的本地缓存中创建自己的副本。更新此值时,更新首先发生在本地缓存副本中,而不是实际变量中。因此,其他线程不知道其他线程正在更改的值。这就是volatile发挥作用的地方。volatile字段会立即写入主内存,并从主内存进行读取。摘自ThinkingInJa

java - 如何在 Cassandra Java Driver QueryBuilder 中传递 TTL?

我正在使用CassandraJava驱动程序中的QueryBuilder来插入一些数据。似乎没有简单的选项可以在我插入的行上设置TTL。DataStax站点上的示例均未显示TTL示例。我怀疑它与using()有关,但再一次,代码中的示例为零且文档最少... 最佳答案 终于想通了,你必须在QueryBuilder本身上传入静态ttl()方法:.using(ttl(30)); 关于java-如何在CassandraJavaDriverQueryBuilder中传递TTL?,我们在StackO

java - 为什么我们不需要带有 StampedLock 的 volatile?

给定来自Oracle文档的代码示例https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/StampedLock.htmlclassPoint{privatedoublex,y;privatefinalStampedLocksl=newStampedLock();voidmove(doubledeltaX,doubledeltaY){//anexclusivelylockedmethodlongstamp=sl.writeLock();try{x+=deltaX;y+=deltaY;}finally{sl

java - Java 中多次写入对 volatile 变量的影响

我在这个网站上发现了一些有趣的问题(例如,thisone)关于Java中volatile变量的可见性影响,这些问题源自本书JavaconcurrencyinPractice中的这段话:Thevisibilityeffectsofvolatilevariablesextendbeyondthevalueofthevolatilevariableitself.WhenthreadAwritestoavolatilevariableandsubsequentlythreadBreadsthatsamevariable,thevaluesofallvariablesthatwerevisibl

面试官:说说Volatile底层实现原理?

在Java并发编程中,有3个最常用的关键字:synchronized、ReentrantLock和volatile。虽然volatile并不像其他两个关键字一样,能保证线程安全,但volatile也是并发编程中最常见的关键字之一。例如,单例模式、CopyOnWriteArrayList和ConcurrentHashMap中都离不开volatile。那么,问题来了,我们知道 synchronized底层是通过监视器Monitor实现的,ReentrantLock底层是通过AQS的CAS实现的,那volatile的底层是如何实现的?1.volatile作用在了解volatile的底层实现之前,我们

java - 从未分配为 null 的 volatile 变量是否可以包含 null?

可以在以下概念性Java示例中:publicclassXimplementsRunnable{publicvolatileObjectx=newObject();@Runnablepublicvoidrun(){for(;;){Thread.sleep(1000);x=newObject();}}}x曾被另一个线程读取为null吗?奖励:我是否需要将其声明为volatile(我并不真正关心该值,它足以在将来的某个时候成为新分配的值并且永远不会为null) 最佳答案 从技术上讲,是的。这是原始ConcurrentHashMap'sre

java - int 基本类型的 volatile 声明

我在AtomicAccess上引用了Oracle的Java文档Readsandwritesareatomicforreferencevariablesandformostprimitivevariables(alltypesexceptlonganddouble).Readsandwritesareatomicforallvariablesdeclaredvolatile(includinglonganddoublevariables).我了解volatile的工作原理。但是提到需要为long和double变量显式声明volatile以在第二个语句中获得原子访问,这使得volatile

java - 字段读取同步和volatile的区别

在一个不错的articlewithsomeconcurrencytips,一个示例被优化为以下几行:doublegetBalance(){Accountacct=verify(name,password);synchronized(acct){returnacct.balance;}}如果我理解正确,同步的目的是确保此线程读取的acct.balance值是当前值,并且还写入了对acct.balance中对象字段的任何未决写入到主存储器。这个例子让我思考了一下:将acct.balance(即类Account的字段余额)声明为volatile不是更高效吗?它应该更有效,为您保存所有访问ac

java - 无法理解 Java 规范中的 volatile 示例

我大致了解了volatile在Java中的含义。但读书JavaSESpecification8.3.1.4我无法理解该特定示例下方的文字。classTest{staticvolatileinti=0,j=0;staticvoidone(){i++;j++;}staticvoidtwo(){System.out.println("i="+i+"j="+j);}}Thisallowsmethodoneandmethodtwotobeexecutedconcurrently,butguaranteesthataccessestothesharedvaluesforiandjoccurexac