博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言哪些变量不要加锁,[转]关于ReentrantLock中线程读某个变量是否需要加锁
阅读量:5934 次
发布时间:2019-06-19

本文共 3358 字,大约阅读时间需要 11 分钟。

我在使用ReentrantLock类对变量进行多线程累加时,调用了lock()和unlock()方法,但读取该变量时我未加锁,结果是能正确执行,代码如下:

public class Main {

private long count;

private ExecutorService pool;

private Lock lock = new ReentrantLock();

/**

* @param args

*/

public static void main(String[] args) {

new Main().countThread();

}

public Main() {

pool = Executors.newFixedThreadPool(50);

}

public void countThread() {

for (int i = 0; i 

pool.execute(new Runnable() {

@Override

public void run() {

lock.lock();

try {

count++;

} catch (Exception e) {

e.printStackTrace();

} finally {

lock.unlock();

}

}

});

}

while (true) {

System.out.println(count);

if (count == 3000) {

break;

}

}

System.out.println(count);

pool.shutdown();

}

}

http://www.infoq.com/cn/articles/java-memory-model-1

这篇文章介绍了Java内存模型定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。

能不能这样理解,类中的全局变量是存储在主内存。也就是读操作不需要锁,不知道理解是否正确。

合理解释:

主存的变量,线程的本地内存会有一个副本这没错.可是两者有一个同步时机的问题,所以你这样用是不安全的.

要么两边都同步保护,要么你增加"volatile"关键字提示这个变量不能创建本地副本.

Java 并发包中的读写锁及其实现分析

1. 前言 在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时 刻可以允许多个读线程访问,但是在写线程访问时,所有 ...

Java中的读写锁

一.读写锁 1.初识读写锁 a)Java中的锁——Lock和synchronized中介绍的ReentrantLock和synchronized基本上都是排它锁,意味着这些锁在同一时刻只允许一个线程进 ...

Java并发包中线程池ThreadPoolExecutor原理探究

一.线程池简介 线程池的使用主要是解决两个问题:①当执行大量异步任务的时候线程池能够提供更好的性能,在不使用线程池时候,每当需要执行异步任务的时候直接new一个线程来运行的话,线程的创建和销毁都是需要 ...

java中ReentrantReadWriteLock读写锁的使用

Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象. 读写锁:分为读 ...

Java线程:条件变量、原子量、线程池等

一.条件变量 条件变量实现了java.util.concurrent.locks.Condition接口,条件变量的实例化就是通过一个Lock对象上调用newCondition()方法获得的,这样条件 ...

MFC 中线程传递CString 是不安全的 转

MFC 中线程传递CString 是不安全的       在MFC中,向线程传递CString变量参数时,很容易犯一个错误,就是使用一个超出生存期的变量,在主函数中定义的CString变量是局部变量 ...

java中线程和并发面试题

http://www.cnblogs.com/dolphin0520/p/3932934.html http://www.cnblogs.com/dolphin0520/p/3958019.html ...

Java并发编程中线程池源码分析及使用

当Java处理高并发的时候,线程数量特别的多的时候,而且每个线程都是执行很短的时间就结束了,频繁创建线程和销毁线程需要占用很多系统的资源和时间,会降低系统的工作效率. 参考http://www.cnb ...

Java 中线程安全问题

不好意思,一个国庆假期给我放的都不知道东西南北了,放松,很放松,差一点就弃更了,感谢那些催更的小伙伴们! 虽然没有更新,但是日常的学习还是有的,以后我尽量给大家分享一些通用知识,非技术. 但是本期还是 ...

随机推荐

HTML中添加背景音乐

C学习笔记 知识集锦(一)

1.标识符  2.寄存器变量 3.全局变量 4.分配内存与初始化 5.变量定义与声明 6.作用域规则 跳转语句 7.&与&&,|和||的意义与区别 8.如何选择switch c ...

Tomcat学习 HttpConnector和HttpProcessor启动流程和线程交互

一.tomat启动流程 1.启动HttpConnector connector等待连接请求,只负责接受socket请求,具体处理过程交给HttpProcessor处理. tomcat用户只能访问到co ...

POJ 3162 Walking Race 树形DP+线段树

给出一棵树,编号为1~n,给出数m 漂亮mm连续n天锻炼身体,每天会以节点i为起点,走到离i最远距离的节点 走了n天之后,mm想到知道自己这n天的锻炼效果 于是mm把这n天每一天走的距离记录在一起,成 ...

elasticsearch-head 的搭建

elasticsearch-head 全部是js和html5写的,elasticsearch 全部都是http的接口, 这样,只需要简单地本地配置一个虚拟站点,就可以搭建  elasticsearch ...

[Hadoop源码解读](三)MapReduce篇之Job类

下面,我们只涉及MapReduce 1,而不涉及YARN. 当我们在写MapReduce程序的时候,通常,在main函数里,我们会像下面这样做.建立一个Job对象,设置它的JobName,然后配置输入 ...

asp.net mvc4 Controller与Action执行过程的研究(学习笔记)

当IIS收到一个http请求,把请求信息发给对应的HttpModel(实际是实现类UrlRoutingModule),在HttpModel中会注册HttpApplication 类中的PostReso ...

div行高不确定,文字和图片居中

// 加在父级div中 垂直居中:align-items:center; display: -webkit-flex;水平居中:justify-content:center; display: -we ...

一款用于对 WiFi 接入点安全进行渗透测试的工具

越来越多的设备通过无线传输的方式连接到互联网,以及,大范围可用的 WiFi 接入点为攻击者攻击用户提供了很多机会.通过欺骗用户连接到虚假的 WiFi 接入点,攻击者可以完全控制用户的网络连接,这将使得 ...

poj2478 Farey Sequence 欧拉函数的应用

仔细看看题目,按照题目要求 其实就是 求 小于等于n的 每一个数的 欧拉函数值  的总和,为什么呢,因为要构成 a/b 然后不能约分  所以 gcd(a,b)==1,所以  分母 b的 欧拉函数值   ...

你可能感兴趣的文章
服务应该去版本化,不管是微服务还是SOA
查看>>
Rate limiting限流
查看>>
Netflix:当你按下“播放”的时候发生了什么?
查看>>
一行代码迁移TensorFlow 1.x到TensorFlow 2.0
查看>>
2018智博会与腾讯“云+未来”峰会重庆站同日揭幕,六大亮点提前连连看
查看>>
为什么Oracle公开嫌弃自家产品MySQL?
查看>>
华为敏捷DevOps实践:如何从Excel管理软件的方式中走出来
查看>>
为什么Python发展得如此之快?
查看>>
使用Spring Cloud Function框架进行面向函数的编程
查看>>
C# 8的Ranges和递归模式
查看>>
大前端时代,如何做好C 端业务下的React SSR?\n
查看>>
基础设施即代码:Terraform和AWS无服务器
查看>>
LCA---Lowest common ancestor
查看>>
新的UWP和Win32应用程序分发模型
查看>>
乔布斯的64周年诞辰,苹果滞销的第N天
查看>>
Apache CarbonData里程碑式版本1.3发布
查看>>
组合式测试:移动测试服务的发展趋势
查看>>
一线:阿里云不做SaaS,那这件事会交给谁?
查看>>
Netflix混沌工程手册Part 2:混沌工程原则
查看>>
Serialize and Deserialize Binary Tree & BST
查看>>