- 浏览: 1379954 次
- 性别:
- 来自: 江西
文章分类
- 全部博客 (287)
- oracle (30)
- Java (73)
- MySQL (16)
- Myeclipse/eclipse (12)
- javascript (15)
- JSP/Servlet (7)
- maven (14)
- AJAX (2)
- JQuery (9)
- tomcat (8)
- spring (21)
- Linux (28)
- PHP (9)
- UI (1)
- 编程错误及处理 (38)
- 多线程 (18)
- hibernate (10)
- Web Service (3)
- struts2 (6)
- log4j (3)
- SVN (4)
- DWR (1)
- lucene (1)
- 正则表达式 (4)
- jstl (2)
- SSL (3)
- POI (1)
- 网络编程 (1)
- 算法 (2)
- xml (4)
- 加密解密 (1)
- IO (7)
- jetty (2)
- 存储过程 (1)
- SQL Server (1)
- MongoDB (1)
- mybatis (1)
- ETL (1)
- Zookeeper (1)
- Hadoop (5)
- Redis (1)
- spring cloud (1)
最新评论
-
ron.luo:
牛逼,正解!
maven设定项目编码 -
lichaoqun:
java.sql.SQLException: Can't call commit when autocommit=true -
Xujian0000abcd:
Thanks...
Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the clas -
renyuan2ni:
[i][b][u]引用[list]
[*][img][flas ...
Manual close is not allowed over a Spring managed SqlSession -
851228082:
宋建勇 写道851228082 写道<!-- 文件拷贝时 ...
maven设定项目编码
/** * ReadWriteLockTest.java * cn.com.songjy.test.socket.thread * Function: TODO * * version date author * ────────────────────────────────── * 1.0 2013-8-19 songjy * * Copyright (c) 2013, TNT All Rights Reserved. */ package cn.com.songjy.test.socket.thread; import java.util.HashMap; import java.util.Map; import java.util.Random; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * ClassName:ReadWriteLockTest * jdk1.5读写锁技术的妙用 * * @author songjy * @version 1.0 * @since v1.0 * @Date 2013-8-19 下午9:11:37 */ public class ReadWriteLockTest { private Log log = LogFactory.getLog(ReadWriteLockTest.class); public static void main(String[] args) { final Queue queue = new Queue(); for (int i = 0; i < 3; i++) { new Thread() { public void run() { while (true) { queue.get(); } } }.start(); new Thread() { public void run() { while (true) { queue.put(new Random().nextInt(10000)); } } }.start(); } } /* 缓存模拟 */ final ReadWriteLock rwl = new ReentrantReadWriteLock(); Map<String, Object> cache = new HashMap<String, Object>(); public Object getData(String key) { rwl.readLock().lock();// 上读锁 Object obj = null; try { obj = cache.get(key); if (null == obj) { rwl.readLock().unlock();// 开读锁 rwl.writeLock().lock();// 上写锁 try { if (null == obj) {// 为啥还要判断一次呢,去掉本行判断难道会影响业务逻辑吗,答案是否定,去掉不会影响业务逻辑, 但该判断是必须的,是为了提高程序性能!原因是当2(多)个线程同时执行到了75行,则第一个线程上写锁并写入数据,第二个线程就阻塞,第一个线程接着开写锁上读锁,当最后开读锁完毕时,第二个线程马上进行上写锁,并再次写入数据,这时发生了不必要的第二次数据写入,因为第一次已经写入了,若有if (null == obj)的判断就不会发生第二次写数据的重复写入! obj = "obj";// 通常是去查询数据库等操作 } } catch (Exception e) { log.error(e.getMessage(), e); } finally { rwl.writeLock().unlock();// 开写锁 } rwl.readLock().lock();// 上读锁 } } catch (Exception e) { log.error(e.getMessage(), e); } finally { rwl.readLock().unlock();// 开读锁 } return obj; } } class Queue { private Log log = LogFactory.getLog(Queue.class); private Object data = null;// 共享数据,只能有一个线程能写该数据,但可以有多个线程同时读该数据。 private ReadWriteLock rwl = new ReentrantReadWriteLock(); public void get() { rwl.readLock().lock(); try { log.info(Thread.currentThread().getName() + " be ready to read data!"); Thread.sleep((long) (Math.random() * 1000)); log.info(Thread.currentThread().getName() + "have read data :" + data); } catch (InterruptedException e) { log.error(e.getMessage(), e); } finally { rwl.readLock().unlock(); } } public void put(Object data) { rwl.writeLock().lock(); try { log.info(Thread.currentThread().getName() + " be ready to write data!"); Thread.sleep((long) (Math.random() * 1000)); this.data = data; log.info(Thread.currentThread().getName() + " have write data: " + data); } catch (InterruptedException e) { log.error(e.getMessage(), e); } finally { rwl.writeLock().unlock(); } } }
来自:http://down.51cto.com/data/443434
发表评论
-
java.io.NotSerializableException: java.util.ArrayList$SubList
2016-03-15 11:36 2862错误信息: 原代码: if (null != dto ... -
java.lang.NoSuchMethodError
2015-10-30 19:50 1237在执行命令 java -Djava.ext.dirs=./de ... -
OutOfMemoryError
2015-01-07 10:49 676错误信息: 执行命令(修改前): java -Djava. ... -
自定义ClassLoader
2014-12-14 17:13 888一、自定义类加载器代码: package foo; im ... -
ExecutorService.shutdown()应该是在线程执行完毕后,才会去关闭
2014-04-29 13:03 19574看到一个博客,如下 Jav ... -
URL传递中文参数乱码问题
2014-03-14 12:55 1154项目特殊要求,form表单使用get方式提交,由此出现了中文乱 ... -
Java使用正则进行奇偶替换
2013-12-30 11:20 1593/** * 将位于偶数位的数字1替换为2 */ ... -
Java调用ping命令
2013-11-26 10:26 3713package cn.com.songjy; impor ... -
Linux开机启动Java程序
2013-11-25 15:26 3589一、编写启动Java程序shell脚本(smssend.sh) ... -
单例模式
2013-11-05 09:58 791Java之美[从菜鸟到高手演变]之设计模式 Java开发中 ... -
判定2个对象相等之重写equals方法
2013-10-18 11:03 1097package cn.com.songjy.test; ... -
SAX解析XML文件示例
2013-09-13 17:32 1046package cn.com.songjy.test.xml; ... -
二分查找算法(Binary Search)
2013-09-13 17:01 2454项目中遇到需要从数组中查找数据,但是算法很多,于是根据项目需求 ... -
Iterate over rows and cells(EXCEL文件的读取)
2013-09-13 14:13 4098package cn.com.songjy.test.exce ... -
jdk1.5的Exchanger同步工具
2013-08-27 14:04 703package cn.com.songjy.test.sock ... -
jdk1.5的CountDownLatch同步工具
2013-08-27 13:37 813package cn.com.songjy.test.sock ... -
jdk1.5的Semaphere同步工具
2013-08-23 14:20 1094package cn.com.songjy.test.so ... -
jdk1.5条件阻塞Condition的应用
2013-08-23 09:42 1366package cn.com.songjy.test.sock ... -
jdk1.5的线程锁技术
2013-08-19 20:25 964/** * LockTest.java * cn.co ... -
Callable与Future的应用
2013-08-19 20:03 1071/** * CallableAndFuture.java ...
相关推荐
标题:“jdk1.5 windows版本 64位” 描述:“jdk1.5 windows版本 64位,Java开发依赖环境” 标签:“windows” 在这个主题中,我们聚焦的是Oracle JDK 1.5(也被称为Java Development Kit,简称JDK)在Windows...
JDK1.5是Java的一个重要版本,它在2004年9月30日正式发布,也被称为Java 5.0。这个版本引入了大量的新特性,对Java平台进行了重大改进,提升了开发效率和性能。 首先,JDK1.5引入了类型安全的枚举(enum),这是对...
3. **安装JDK**:使用RPM命令来安装JDK1.5: ``` sudo rpm -ivh jdk-1_5_0_22-linux-amd64.rpm ``` 4. **配置环境变量**:安装完成后,需要将JDK的路径添加到系统的`PATH`环境变量中。打开或创建`~/.bashrc`或`/...
在JDK1.5中,开发者可以在方法签名中使用省略号(...)表示可变参数。这允许方法接受任意数量的相同类型的参数,如: ```java public void printNumbers(int... nums) { // 代码块 } ``` 这个方法可以接收一个或多...
jdk1.5.exe jdk1.5 jdk1.5下载
绝版jdk1.5,非常不错的资源。用起来很好。是 Java语言对Bean类属性、事件的一种缺省处理方法。例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新 的值。通过getName/setName来访问name属性,...
泛型是JDK1.5最重要的特性之一,它允许在类、接口和方法声明中使用类型参数,以实现数据类型的参数化。泛型提高了代码的类型安全性和可读性,减少了类型转换的需要,并允许编译器检查类型错误。 2. **自动装箱与...
这个压缩包包含了三个不同版本的JDK:JDK 1.5、JDK 1.6和JDK 1.8,其中1.5和1.6是早期版本,而1.8是最流行且广泛使用的版本之一。 **JDK 1.5(也称为Java 5.0)** JDK 1.5在2004年发布,引入了许多重要的新特性,如...
前几天上传过这个资源,因为是在jdk1.6上开发的, 测试了一下在jdk1.5上不能用, 今天重新用jdk1.5编译了一下, 这个是可以支持jdk1.5+的 将 pu-xlscommon-1.0.0.jar 添加到工程的 /lib 目录下 用法在附件中 XlsTest....
标题中的"window JDK1.5 32位 绿色免安装版"指的是适用于Windows操作系统的32位版本的JDK 1.5,它是一个便携式版本,无需正式安装即可使用。这种绿色免安装版通常是为了方便开发者在不同机器间快速切换工作环境,或...
测试可用的linux版jdk1.5,jdk-1_5_0_19-linux-i586-rpm.bin
JDK1.5 全平台安装包下载 百度网盘资源 jdk-1_5_0_22-linux-amd64-rpm.bin jdk-1_5_0_22-linux-amd64.bin jdk-1_5_0_22-linux-i586-rpm.bin jdk-1_5_0_22-linux-i586.bin jdk-1_5_0_22-solaris-amd64...
**JDK1.5**,又称为Java Development Kit的第5个主要版本,标志着Java语言的一个重大里程碑。这个版本引入了一系列创新性特性和改进,极大地提升了开发效率和代码的可读性,为Java编程带来了全新的体验。以下是JDK...
本文将深入探讨Linux下JDK1.5的相关知识点,帮助用户更好地理解和使用这个版本的Java开发环境。 首先,安装JDK1.5在Linux系统中通常涉及以下步骤: 1. **下载**:你需要从Oracle官方网站或者第三方镜像站点下载...
另外,JDK1.5还对I/O流进行了改进,引入了NIO(非阻塞I/O)框架,提供了通道(Channels)和缓冲区(Buffers)的概念,提高了读写操作的效率,尤其适用于高并发的网络应用。 总的来说,JDK1.5对Java语言做了大量的...
IBM JDK 1.5 for Linux 64位是一款专为Linux操作系统设计的Java开发工具包,由IBM公司提供。此版本的JDK是基于Java Development Kit(JDK)1.5,也称为Java 5.0,它在Java平台标准版(Java SE)的历史上是一个重要的...
JDK1.5,也被称为JDK 5.0,是一个重要的版本,它引入了许多创新特性,显著提升了开发效率和代码质量。这个版本在2004年发布,是Java发展历程中的一个里程碑。 JDK1.5的主要新特性包括: 1. **泛型(Generics)**:...
8. 遗留的和已删除的特性:JDK 1.5还移除了一些过时的API,如Vector和Hashtable,鼓励开发者使用更加线程安全的ArrayList和HashMap。 9. 类依赖性管理:通过引入ServiceLoader,可以方便地加载实现特定接口的类,...
JDK1.5,也被称为Java SE 5.0,是Oracle公司于2004年发布的一个重大更新,带来了许多重要的新特性、改进和优化。以下是对这个版本的一些关键知识点的详细解释: 1. **泛型(Generics)**:JDK1.5引入了泛型,使得...
本压缩包包含了JDK的两个重要版本:1.5(也称为Java 5)和1.6(Java 6),这两个版本在历史上对Java社区有着深远的影响。 JDK 1.5(2004年发布)是Java发展的一个重要里程碑,引入了许多新特性,极大地提升了开发...