- 浏览: 1589907 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; /** * 使用读写锁 实现一个 缓存模型 * */ public class CasheDemo { /** * @param args */ private Map<String,Object> cache=new HashMap<String, Object>(); public static void main(String[] args) { // TODO Auto-generated method stub } /* public synchronized Object getData(String key){ Object value=cache.get(key); if(value==null){ value="aaa"; //实际去queryDB(); } return value; }*/ //多个线程 读取的时候 可以同时并发.不会造成数据的破坏与冲突, //但发现 数据为空的时候,该线程 改成 写锁 用来填充数据,写完后变成 读锁. 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 { if(value==null) value="aaa"; //实际去queryDB(); } catch (Exception e) { // TODO: handle exception }finally{ rwl.writeLock().unlock(); } rwl.readLock().lock(); } } catch (Exception e) { e.printStackTrace(); }finally{ rwl.readLock().unlock(); } return value; } }
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 998public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2282经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
java 反射List
2017-02-18 01:58 5654package com.enhance.reflect; ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 986import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1055/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1008//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1823更多介绍http://blog.csdn.net/java20 ... -
java 读写锁
2016-08-03 23:46 815import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2396import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 925// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1172import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 801import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1145import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3892import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 964/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1022import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1840Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1004/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2230package out; import ja ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2014-11-27 11:45 1987PO(persistant object) 持久 ...
相关推荐
Zookeeper基于一个分布式文件系统的模型,每个节点(称为Znode)都可以存储数据并监听其他节点的变化。 **二、分布式读写锁** 分布式读写锁是一种确保多线程或跨节点之间对共享资源正确访问的机制。在读写锁中,多...
volatile关键字是Java内存模型中一个非常重要的概念,它保证了变量的可见性,即任何线程对该变量的修改都会立即被其它线程得知,但并不保证操作的原子性。 ### 锁机制 在Java中,锁是一种同步机制,用来控制多个...
总之,Java内存模型是Java编程中的一个基础性话题,它定义了Java程序在多线程环境下关于数据共享、线程通信和同步的规则和约束。深入掌握Java内存模型对于编写高效且正确的Java多线程程序有着不可忽视的作用。程序员...
通过在读写过程中加入一个缓存区,可以减少磁盘访问次数,从而提升整体性能。Java中提供了`BufferedReader`和`BufferedWriter`来支持字符缓冲流的操作,它们分别继承自`Reader`和`Writer`类,并且内部维护了一个固定...
本文将详细解析标题为“DistributedRW”的项目,它是一个使用Java编程语言实现的分布式读写文件系统。这个系统设计的目标是为了在多台机器之间高效、可靠地分发和处理大文件,提高数据的存取性能,并确保数据的一致...
Java内存模型是并发编程中一个至关重要的概念,它定义了共享变量的访问规则,以及这些变量如何在多线程环境下进行读写操作。在深入理解Java内存模型之前,我们需要先了解并发编程模型的分类,然后掌握Java内存模型的...
Java内存模型,简称JMM(Java Memory Model),是Java编程语言规范的一部分,它定义了程序中各个线程如何访问和修改共享变量,以及如何确保数据的一致性。深入理解Java内存模型对于编写高效的并发程序至关重要。本文...
当一个线程修改了共享变量,并写回缓存,但其他线程可能无法立即感知到这一变化,因为它们可能还在使用旧的缓存值。Java内存模型通过使用volatile关键字来解决这个问题。volatile确保了对变量的修改对其他线程立即...
当多个缓存共享同一份数据时,如果一个缓存对数据的修改没有及时通知到其他缓存,就会导致数据不一致。 Java内存模型是在计算机内存模型的基础上,对共享内存多线程程序语言设计的抽象。在多线程环境下,不同的线程...
在Java内存模型中,线程之间的通信需要经过两个步骤:首先,一个线程将更新过的共享变量从本地内存刷新到主内存;其次,另一个线程从主内存中读取这个共享变量。JMM通过控制主内存与每个线程的本地内存之间的交互,...
在Java编程领域,高并发程序设计是至关重要的一个部分,特别是在大数据处理、互联网服务和分布式系统中。"实战Java高并发程序设计模式"的主题旨在帮助开发者掌握如何在高并发环境中有效地设计和实现高效的程序。本篇...
- 开发一个功能全面且易于扩展的Java管理系统。 - 提高数据处理效率及准确性,简化操作流程。 - 实现对业务流程的有效监控与管理。 - 提升用户体验,支持多终端访问。 ### 二、系统架构设计 #### 2.1 技术选型 - *...
SSM(Spring、SpringMVC、MyBatis)是Java企业级开发中的常见框架组合,而Redis则是一个高效的内存数据存储系统,常作为缓存使用。本项目提供了一个Java实现的Redis缓存工具类,结合SSM框架,可以帮助开发者快速地...
Java内存模型(Java Memory Model,JMM)是Java虚拟机(JVM)规范中的一个重要组成部分,它定义了程序中各个变量(包括实例域、静态域和数组元素)的访问规则,以及在实际计算机系统中如何将这些变量存储在内存和从...
再者,数据一致性是秒杀系统中的另一个关键问题。在高并发下,数据库可能会面临大量的读写操作,如何保证事务的ACID特性,尤其是原子性和一致性,是系统设计的重要环节。书里会介绍乐观锁、悲观锁、分布式事务解决...
Java分布式程序设计是Java开发中的一个重要领域,它涉及到多个计算机节点通过网络进行协作,共同完成一个复杂的任务。在Java中,分布式系统可以实现负载均衡、高可用性、可扩展性和数据共享等功能,广泛应用于云计算...
在Java中,当需要使用一个已经存在的类,但它提供的接口与我们的需求不符时,可以使用适配器模式进行转换。 6. 桥接模式:桥接模式将抽象部分与实现部分分离,使它们可以独立变化。在Java中,如果一个类有多个维度...
在设计模式方面,我们会学习到一些经典的并发模式,如生产者消费者模式(Producer-Consumer)、读写锁模式(Read-Write Lock)和双检锁/双重校验锁(Double-Checked Locking)。这些模式有助于我们在实际项目中优雅...