下列关于Java并发的说法中正确的是()牛客网
2016-09-05 10:39
579 查看
下列关于Java并发的说法中正确的是()
一个线程执行的过程有三个阶段: 加载(复制)主存数据到操作栈 --> 对操作栈数据进行修改 --> 将操作栈数据写回主存 volatite关键字,让编译器不去优化代码使用缓存等,以保证线程在“加载数据阶段”加载的数据都是最新的
比如: 某一时刻i=6是最新的值,volatile保证线程A,B都同时加载了这个最新的值, 然后A执行i(A)+1=7,然后将7写回主存, B也执行i(B)+1=7,然后也将7写回内存, 这样,执行两次加法,i却只增加了1
正确答案:B
A CopyOnWriteArrayList适用于写多读少的并发场景
B ReadWriteLock适用于读多写少的并发场景
C ConcurrentHashMap的写操作不需要加锁,读操作需要加锁
D 只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全的了 解析:对于D选项,volatite只保证线程在“加载数据阶段”加载的数据是最新的,并不能保证线程安全。
一个线程执行的过程有三个阶段: 加载(复制)主存数据到操作栈 --> 对操作栈数据进行修改 --> 将操作栈数据写回主存 volatite关键字,让编译器不去优化代码使用缓存等,以保证线程在“加载数据阶段”加载的数据都是最新的
比如: 某一时刻i=6是最新的值,volatile保证线程A,B都同时加载了这个最新的值, 然后A执行i(A)+1=7,然后将7写回主存, B也执行i(B)+1=7,然后也将7写回内存, 这样,执行两次加法,i却只增加了1
相关文章推荐
- 以下关于java封装的描述中,正确的是:(牛客网)
- 关于高负载高并发的服务器端应用,java解决方案(一)
- 关于“.Net是从Java抄袭而来的”这种无知的说法
- java 关于System.out.println的多线程并发问题
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- Java 8 LongAdders:管理并发计数器的正确方式
- 【Java并发编程】之十八:第五篇中volatile意外问题的正确分析解答(含代码)
- 关于多线程并发包的一些学习理解(java.util.concurrent)
- java 并发编程学习笔记之volatile意外问题的正确分析解答
- Java关于空字符串的正确判断
- 关于64位WIN7下正确建立JAVA开发环境
- 关于Java并发编程和Web开发的疑问及搜索答案
- 关于Java并发CountDownLatch与CyclicBarrier
- 关于Java的API无法正确显示的问题
- 关于高负载高并发的服务器端应用,java解决方案(二)
- 刚接触java,写的一个并发访问网站计时的程序,总是捕捉到服务器返回不正确的状态码
- 关于64位WIN7下正确建立JAVA开发环境(转
- 【Java并发编程】之十八:第五篇中volatile意外问题的正确分析解答(含代码)
- 关于java中关闭数据库链接的正确写法
- 关于Java的一点正则表达式来验证E-mail是否正确