java多线程读一个变量需要加锁吗?

如题所述

如果只是读操作,没有写操作,则可以不用加锁,此种情形下,变量加上final关键字;
如果有写操作,但是变量的写操作跟当前的值无关联,且与其他的变量也无关联,则可考虑变量加上volatile关键字,同时写操作方法通过synchronized加锁;
如果有写操作,且写操作依赖变量的当前值(如:i++),则getXXX和写操作方法都要通过synchronized加锁。
温馨提示:内容为网友见解,仅供参考
无其他回答

Java中所说的线程安全是指什么?
关于线程安全,是指当多个线程访问同一个变量时,该变量不会因为多线程访问产生意想不到的问题,为了避免多线程访问的不可预知的问题,对于程序中多线程能访问到的变量要加锁,即加synchronized,放在同步块中,或者对改变该变量值的方法加synchronized限制。当然jdk中自带的一些类本身就实现了该机制,本身...

java\/c\/c++等高级语言,读操作需要加锁吗?
java web的话 是不需要的,因为每次request请求通过servlet的时候servlet会开启新的线程来执行代码,现在web项目都是使用spring容器的,spring会对线程使用threadlocal,这样会把类中的变量为每个线程复制一份,所以当并发时不会因为未加锁影响其它线程。当然不是绝对的,如果是操作静态变量,应该是要加锁的。

java中如果不加同步锁,多个线程对同一个变量修改,为什么会出现混乱...
因为线程的完成时间问题,有可能线程A先完成,将变量S赋值为s了,然后线程B再完成,将S赋值为s1,那么S的值就为s1;但是,有可能线程B先完成,将S赋值为s1,然后线程A再完成,给S赋值s,那么S的值就是s了。

关于java多线程操作同一个map,问为什么有时获取不到map里面的值。_百 ...
synchronized 就可以了

...对同一int变量进行读写,是否需要加锁?(貌似java中这是原子操作,不必...
如果变量是总线程,也就是多线程都对该int进行读写,就要加锁……

深度解析Java中的ReadWriteLock:高效处理并发读写操作
现在,咱们用Java代码来展示一下ReadWriteLock的基本使用。代码示例中的变量名和注释都用中文,以便理解。在这个示例中,咱们有一个简单的ReadWriteLock实例。当小黑需要读取数据时,它获取读锁;当需要写入数据时,它获取写锁。注意,当一个线程持有写锁时,其他线程既不能读也不能写,确保了数据的一致...

Java多线程中,锁是什么,所谓的获取锁是什么意思
简单的跟你讲一下,当有多个线程使用同一个资源的时候,为了避免死锁,往往在一个线程在使用一个资源的时候给这段代码一个锁(也就是说我在操作的时候别人都不能动),在执行完后再把这个锁放开(这时候别的线程就可以使用该资源了)。

java开两个线程操作同一个对象会有什么情况?
那么它们必须等待先来的完成,打印程序只能有一个,线程上锁了 有一段服务器代码,有两个甚至多个网页去请求他,他会给每一个线程创建一个一样的对象去处理事物,而不用等待别人操作完 你说的两个线程去操作一个对象,那应该是操作共享资源,只要没有内存溢出等等异常是完全可以正常执行的 ...

JAVA中多线程读取成员变量的重复问题
在某一时刻,num=8,线程1SystemOut:8,然后被中断,执行线程2,也是SystemOut:8,然后又被中断执行线程3,再线程4,这时候4个线程都输出了8,最后回到线程1执行num--。即使是一条语句,也不能保证是原子操作,除非调用的对象说明是线程安全的,或者使用锁、队列,否则都不能保证并发的安全。

Java多线程并发读写锁ReadWriteLock实现原理剖析
在Java中,我们经常使用`synchronized`锁和`ReentrantLock`等独占锁来实现并发控制。然而,为了提升并发性能,引入了共享锁与独占锁结合的读写锁,以适应读多写少的场景。读写锁的特性在于:读操作不会修改数据,可同时由多个线程执行;写操作则会修改数据,仅允许一个线程执行。读写锁内部维护读锁与写锁...

相似回答