----------------------
android培训、
java培训、期待与您交流! ----------------------
在学习黑马基础知识视频的时候,看到了下边一段程序对读写锁的使用:
在学习过程对于getData中的value判断很是纠结,value是一个局部变量 ,一个线程操作不影响另外的线程内容,为什么要判断第二次value==null呢,之后比较下边代码和jdk开发文档中的实例发现,如果数据共享需要第二次判断,否则不需要
下边是视频中的实例代码
package cn.itcast.heima2;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class CacheDemo {
private Map<String, Object> cache = new HashMap<String, Object>();
public static void main(String[] args) {
// TODO Auto-generated method stub
}
private ReadWriteLock rwl = new ReentrantReadWriteLock();
public Object getData(String key){
rwl.readLock().lock();
Object value = null;//局部变量
try{
value = cache.get(key);
if(value == null){//第一次判断
rwl.readLock().unlock();
rwl.writeLock().lock();
try{//不同线程执行到次需要重新读取map中的数据进行判断,而不是使用原来的vlaue直接进行判断
if(value==null){//二次判断
value = "aaaa";//实际失去queryDB();
}
}finally{
rwl.writeLock().unlock();
}
rwl.readLock().lock();
}
}finally{
rwl.readLock().unlock();
}
return value;
}
}
在getData方法中存在两处对value变量的判断,咋一看之下和jdk开发文档上很相近考虑很周密,但是当看到value是getData方法的局部变量的时候,感觉实例存在小小的问题,value没有起到数据共享的作用,因此第二处的value==null判断没有必要,在看开发文档中对于读写锁部分实例中判断条件局势全局变量,所以能够达到数据共享的效果,如果一个线程得到写锁,处理完数据另外的数据得到写锁可能处理同样的数据,所以需要进行判断;
----------------------
android培训、
java培训、期待与您交流! ----------------------
详细请查看:
http://edu.csdn.net/heima
分享到:
相关推荐
黑马程序员_张孝祥_Java多线程与并发库,老师讲的非常仔细,老师很有耐心.欢迎大家下载学习.
根据给定文件的信息,我们可以提炼出以下关于Java多线程与并发库的相关知识点: ### Java多线程基础 1. **线程的概念**:在Java中,线程是程序执行流的基本单元。一个标准的Java应用程序至少有一个线程,即主...
在"黑马程序员_Java基础辅导班教程课件[第01期]第13天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java开发的基本技能。第13天的课程通常会涵盖上一天(第12天)所学...
【标题】"01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip" 提供的是一门由黑马程序员机构推出的Java基础强化课程,由讲师张孝祥主讲,旨在深入讲解Java编程的基础知识并进行能力提升。 【描述】中提到...
这个名为“黑马程序员_毕向东_Java基础源码.rar”的压缩包文件,包含了丰富的Java基础源代码实例,对于初学者来说,是深入了解Java编程的良好资源。 一、Java基本语法 Java语言以其严格的类型检查和面向对象特性...
本教程将聚焦于Java中的多线程技术,以“黑马程序员-java多线程技术01”为学习起点,探讨如何在Java中实现并管理线程。 首先,我们来理解什么是线程。线程是操作系统分配CPU时间的基本单元,一个进程中可以有多个...
在"黑马程序员_Java基础辅导班教程课件[第01期]第10天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java的核心概念。通过这个阶段的学习,学员将能够理解并运用Java的...
day01_Object类、常用API day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda...Java基础小节练习题答案
总之,Java多线程是Java程序员必须掌握的核心技能之一,它涉及到程序的并发性、性能优化以及资源管理等多个方面。通过"java_Thread.txt"这样的实例学习,可以帮助我们更好地理解和应用Java的多线程特性,提升我们的...
### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...
《黑马程序员_从零开始征服Android之旅(第一季)源码和笔记》是一份全面的Android开发学习资源,旨在帮助初学者系统地掌握Android开发技术,实现从理论到实践的跨越。这份资料涵盖了一系列关键知识点,包括但不限于...
Java多线程是Java编程中不可或缺的部分,它允许程序同时执行多个任务,提高了程序的效率和响应速度。本文主要探讨了多线程的概念、应用场景...因此,理解和掌握Java的多线程技术对于任何Java程序员来说都是至关重要的。
根据提供的文件信息,我们可以推断出这是一套由知名IT教育机构“黑马程序员”出品、由讲师毕向东主讲的Java基础教学视频。由于实际视频内容无法直接获取,本篇将依据标题、描述以及部分标签内容,综合分析并展开相关...
Java并发库是Java编程中非常重要的一个领域,它为开发者提供了高效、安全的多线程编程工具。在《java并发库高级应用源码--张孝祥》中,我们将会深入探讨Java中的线程管理和并发控制策略,这对于我们理解和优化多线程...
Java多线程设计模式是Java开发中的核心概念,它涉及到如何高效、安全地在多个执行线程之间共享资源和协调任务。设计模式是解决特定问题的成熟方案,它们是编程经验的结晶,可以帮助开发者在面临多线程挑战时快速找到...
1、 面向对象、跨平台性、健壮性、安全性、可移植性、多线程性、动态性等。 2、 JRE(Java Runtime Environment,Java 运行时环境),它相当于操作系统部分,提供了 Java 程序运 行时所需要的基本条件和许多 Java ...
在黑马程序员的课程中,可能涵盖了以上知识点的详细讲解,包括如何创建线程、使用线程池、处理并发异常、调试多线程程序以及相关工具的使用。通过学习这些内容,开发者能够掌握多线程编程的基本技能,提高软件的并发...
"黑马程序员Javase笔记"是一个自学者在学习黑马程序员提供的Java全套课程过程中整理的笔记,主要涵盖了Java Standard Edition (Javase) 的核心内容。下面将详细讨论其中的关键知识点。 首先,DOS命令是操作系统中的...