JAVA
文章平均质量分 84
iteye_9253
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap解读
实现原理 锁分离 (Lock Stripping) ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可...原创 2014-08-27 10:43:10 · 222 阅读 · 0 评论 -
Java中动态加载properties文件,而不需要重启应用的解决方法
在Java项目中,如果需要使用.properties类型的文件作为某些配置信息存放介质的时候,一般都是将.properties文件放在src目录下,代码大部分都是这样写的:[java] view plaincopy Properties prop = new Properties(); InputStream is = CommonUtils.class....原创 2013-11-26 15:20:01 · 390 阅读 · 0 评论 -
Java自带的性能监测工具用法简介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm...
在开始介绍之前,先介绍几篇写的比较详细的博客,咱们不求最精,一定最全,最省事。 http://blog.csdn.net/fenglibing/article/details/6411924 一、jstatd 启动jvm监控服务。它是一个基于rmi的应用,向远程机器提供本机jvm应用程序的信息。默认端口1099。 实例:jstatd -J-Djava.security.policy=my.pol...原创 2013-11-19 11:30:38 · 229 阅读 · 0 评论 -
什么是Widget?
Widget的起源 widget最初是源于苹果电脑的一个插件工具——Konfabulator,现在已经扩展应用到windows系统了,这个软件可以把它的功能块放到你 的桌面上,这些功能块就是 widget 比如说:时钟widget,就是在桌面上显示当前的时间;天气widget,可以显示你定制的地区的天气预报;cpu widget可以显示你cpu的占用比率;还有桌面搜索widget、股票w...原创 2012-06-08 11:31:21 · 5978 阅读 · 0 评论 -
BlockingQueue深入分析
一、概述:BlockingQueue作为线程容器,可以为线程同步提供有力的保障。 二、BlockingQueue定义的常用方法1.BlockingQueue定义的常用方法如下: 抛出异常特殊值阻塞超时插入add(e)offer(e)put(e)offer(e, time, unit)移除remove()p...原创 2013-08-12 17:52:49 · 128 阅读 · 0 评论 -
java 多线程 CountDownLatch用法
CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。主要方法 public CountDownLatch(int count); public void countDown(); public void await() throws InterruptedException 构造方法参数指定了计数的次数cou...原创 2013-08-12 17:49:33 · 79 阅读 · 0 评论 -
用 join 或 CountDownLatch 让主线程等待所有子线程完成
原文出处:http://blog.chenlb.com/2008/11/join-or-countdownlatch-make-main-thread-wait-all-sub-thread.html 在编写多线程的工作中,有个常见的问题:主线程(main) 启动好几个子线程(task)来完成并发任务,主线程要等待所有的子线程完成之后才继续执行main的其它任务。 默认主线程退出...原创 2013-08-12 17:39:55 · 81 阅读 · 0 评论 -
JAVA线程池的分析和使用
【原帖:http://www.uml.org.cn/j2ee/201212193.asp】1. 引言合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务 可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用...原创 2013-08-12 14:45:07 · 107 阅读 · 0 评论 -
【解惑】Java方法参数是引用调用还是值调用?
方法调用(call by) 是一个标准的计算机科学术语。方法调用根据参数传递的情况又分为值调用( call by reference ) 和引用调用( call by value ) 。江湖上有很多关于这两种调用的定义 ,最通常的说法是传递值的是值调用,传递地址的是引用调用。这其实很不恰当,这种 这些说法很容易让我们联想到Java的对象参数传递是引用调用,实际上,Java的对象参数传...原创 2013-08-08 00:12:36 · 110 阅读 · 0 评论 -
Java 线程池ThreadPoolExecutor
JDK1.5 开始关于多线程加了很多特性。如:ConcurrentHashMap: 放弃使用公用锁同步每一个方法,使用了更细化的锁机制,分离锁。对于大数据量的 HashMap 同步操作效率有了较大提升。CopyOnWriteArrayList: 是同步 List 的一个并发替代品。其线程安全性来源于这样一个事实:只要有效的不可变对象被正确发布,那么访问它将不再需要更多的同步。在每次需要修...原创 2013-07-17 14:39:37 · 72 阅读 · 0 评论 -
乐观锁VS悲观锁
实际生产环境里边,如果并发量不大,完全可以使用悲观锁定的方法,这种方法使用起来非常方便和简单。但是如果系统的并发非常大的话,悲观锁定会带来非常大的性能问题,所以就要选择乐观锁定的方法。悲观锁假定其他用户企图访问或者改变你正在访问、更改的对象的概率是很高的,因此在悲观锁的环境中,在你开始改变此对象之前就将该对象锁住,并且直 到你提交了所作的更改之后才释放锁。悲观的缺陷是不论是页锁还是行锁,加锁...原创 2013-07-14 23:48:10 · 72 阅读 · 0 评论 -
Annotation注解的介绍和使用 自定义注解
1、Annotation的工作原理:JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型。该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰的class文件和一个注解处理工具组成。Annotation并不直接影响代码的语义,但是他可以被看做是程序的工具或者类库。它会反过来对正在运行的程序语义有所影响。Annotation可以冲源文...原创 2014-01-20 11:34:56 · 86 阅读 · 0 评论 -
Spring 的 AOP :基于Annotation 的“零配置”方式
AOP(Aspect Orient Programming ) , 面向切面编程 。 1、AOP的基本概念: AOP框架并不与特定的代码耦合,AOP框架能处理程序执行中特定的切入点(Pointcut),而不与具体某个类耦合。AOP框架具有如下特征: 1、各步骤之间的良好隔离性。 2、源代码无关性。 AOP的专业术语: 1、Aspect(切面) : 应用运行过程中...原创 2014-01-20 12:38:30 · 80 阅读 · 0 评论 -
Java中的ReentrantLock和synchronized两种锁定机制的对比
多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个 Thread 类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造 —— synchronized 和volatile 。在简化与平台无关的并发类的开发的同时,它决没有使并发类的编写工作变得更繁琐,只是使它...原创 2014-08-26 14:54:21 · 126 阅读 · 0 评论 -
JUC之Atomic系列12大类实例讲解和原理分解
在java6以后我们不但接触到了Lock相关的锁,也接触到了很多更加乐观的原子修改操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,以及并发中的ABA问题,本文讲述Atomic系列的类的实现以及使用方法,其中包含:基本类:AtomicInteger、AtomicLong、AtomicBoolean;引用类型:AtomicReferenc...原创 2014-08-16 01:03:48 · 162 阅读 · 0 评论 -
Spring 之AOP AspectJ切入点语法详解
三6.5 AspectJ切入点语法详解6.5.1 Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的AspectJ切入点指示符如下: execution:用于匹配方法执行的连接点; within:用于匹配指...原创 2014-04-30 16:15:25 · 106 阅读 · 0 评论 -
Java Phaser使用
1 Overview Java 7的并发包中推出了Phaser,其功能跟CyclicBarrier和CountDownLatch有些重叠,但是提供了更灵活的用法,例如支持动态调整注册任务的数量等。本文在Phaser自带的示例代码基础上进行一下简单的分析。 2 Glossary2.1 Registration Phaser支持通过register()和bulkR...原创 2014-03-24 12:33:30 · 580 阅读 · 0 评论 -
BTrace入门及使用实例
介绍Btrace (Byte Trace)是sun推出的一款java 动态、安全追踪(监控)工具,可以不停机的情况下监控线上情况,并且做到最少的侵入,占用最少的系统资源。 In a way, BTrace scripts are very similar to AOP's aspects, but can be attached to any existing Java code (or be...原创 2014-03-02 00:48:15 · 148 阅读 · 0 评论 -
System.nanoTime
System.nanoTime只能用于计算时间差,不能用于计算时间的准确度(System.out.println(new Date(System.nanoTime()));这种是绝对错误的)。 Java代码 long java.lang.System.nanoTime() Returns the current value of the most prec...原创 2014-02-10 17:28:21 · 115 阅读 · 0 评论 -
精巧好用的DelayQueue
我们谈一下实际的场景吧。我们在开发中,有如下场景a) 关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。b) 缓存。缓存中的对象,超过了空闲时间,需要从缓存中移出。c) 任务超时处理。在网络协议滑动窗口请求应答式交互时,处理超时未响应的请求。一种笨笨的办法就是,使用一个后台线程,遍历所有对象,挨个检查。这种笨笨的办法简单好用,但是对象数量过多时,可能存在性能问题,检查间隔时...原创 2014-02-10 17:23:41 · 76 阅读 · 0 评论 -
ReentrantLock可重入锁的使用场景
摘要从使用场景的角度出发来介绍对ReentrantLock的使用,相对来说容易理解一些。场景1:如果发现该操作已经在执行中则不再执行(有状态执行)a、用在定时任务时,如果任务执行时间可能超过下次计划执行时间,确保该有状态任务只有一个正在执行,忽略重复触发。b、用在界面交互时点击执行较长时间请求操作时,防止多次点击导致后台重复执行(忽略重复触发)。以上两种情况多用于进行非重要任务防...原创 2014-02-10 16:01:34 · 81 阅读 · 0 评论 -
线程池ThreadPoolExecutor使用简介
01ThreadPoolExecutor pool = new ThreadPoolExecutor(corePoolSize,02 maximumPoolSize,03 keepAliveTime,...原创 2014-02-10 16:00:59 · 194 阅读 · 0 评论 -
ThreadPoolExecutor线程池的使用与理解
线程池的作用就是用尽可能少的线程来执行尽可能多的Runnable,以实现对线程的充分利用。从ThreadPoolExecutor类的构造方法说起:ThreadPoolExecutorpublic ThreadPoolExecutor(int corePoolSize, // 核心线程数 int maximumPoolSize, ...原创 2014-02-10 15:14:04 · 71 阅读 · 0 评论 -
NIO VS IO
当学习了Java NIO和IO的API后,一个问题很快进入心中:我应该在何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地阐明Java NIO和IO的差异、它们的用例,以及它们如何影响您的代码设计。Java NIO和IO的主要差异下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。IONIO面向流...原创 2013-07-14 23:35:16 · 99 阅读 · 0 评论 -
Java 内存模型及GC原理
一个优秀Java程序员,必须了解Java内存模型、GC工作原理,以及如何优化GC的性能、与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理效率,才能提高整个应用程序的性能。本文将从JVM内存模型、GC工作原理,以及GC的几个关键问题进行探讨,从GC角度提高Java程序的性能。 一、Java内存模型按照官方的说法:Java 虚拟机...原创 2013-07-13 23:00:34 · 107 阅读 · 0 评论 -
网站持久代引发Full GC问题分析
现状:Dragoon(监控系统)的日报显示trade_us_wholelsale(美国wholesale集群),日均Young GC次数25w次左右,应用暂停295w毫秒(相当于40多分钟),Full GC次数600次左右,应用暂停190w毫秒(相当于30多分钟)。GC,尤其是Full GC,每次都会导致JVM暂停工作,处理垃圾回收任务,短时间内无法响应用户请求,大量的Full GC会...原创 2013-07-13 22:57:06 · 417 阅读 · 0 评论 -
职位、岗位与角色
对于人力资源管理者来说,职位(JOB)、岗位(POSITION)和角色(ROLE)几个概念往往混淆,其一是中文翻译的过程中,没有统一的标准,从而导致几个概念混淆,其二是对概念的含义的误解,希望通过本文的澄清,能对您认识这三者的关系有所裨益。 1、 首先来澄清三者的译文: (1)JOB,有的文献和书籍译为“职务”、有的译为“岗位”,有的译为“职位”,在本文中统一译为“职位”。 ...原创 2011-03-23 14:49:13 · 9601 阅读 · 0 评论 -
理解session机制
理解session机制 session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称 为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session...原创 2011-03-03 21:48:32 · 80 阅读 · 0 评论 -
spring分布式事务
分布式事务是指操作多个数据库之间的事务,spring的 org.springframework.transaction.jta.JtaTransactionManager,提供了分布式事务支持。如果使 用WAS的JTA支持,把它的属性改为WebSphere对应的TransactionManager。 在tomcat下,是没有分布式事务的,不过可以借助于第三方软件jotm(Java Op...原创 2012-01-17 11:38:58 · 103 阅读 · 0 评论 -
使用Java混淆工具yguard
在某些情况下, java 开发者可能希望保护自己的劳动成果,防止自己编写的源代码被竞争对手或者其他组织和个人轻易获取而危害自己的利益,最简单有效的办法就是对编译后的 java 类文件进行混淆处理。本文介绍一款这样的工具 yguard 。 yGruard 是一个功能比较强大的 java 类文件的混淆工具,特别适合与 ant 工具集成使用。 本文对 yguard 的基本元素做...原创 2011-10-09 16:45:02 · 193 阅读 · 0 评论 -
几个著名java开源缓存框架的介绍
OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。 OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。拥有全面的API-- OSCache API给你全面的程序来控制所有的OSCache特性。永久缓存--缓存能随意的写入硬盘,因此允许昂贵的创建(expensi...原创 2011-02-11 12:55:23 · 86 阅读 · 0 评论 -
多线程——synchronized
Java 对多线程的支持与同步机制深受大家的喜爱,似乎看起来使用了 synchronized 关键字就可以轻松地解决多线程共享数据同步问题。到底如何?――还得对 synchronized 关键字的作用进行深入了解才可定论。 总的说来, synchronized 关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类, synchronized 可...原创 2012-01-13 15:41:34 · 84 阅读 · 0 评论 -
java.util.Collections使用说明
空集合Collections.EMPTY_LIST,Collections.emptyList()——返回只读的空LIST 集合Collections.EMPTY_MAP,Collections.emptyMap()——返回只读的空MAP集合Collections.EMPTY_SET,Collections.emptySet()返回只读的空SET集合...原创 2011-09-14 11:07:39 · 126 阅读 · 0 评论 -
JAVA事务四
Java中, 对于事务模式, 一般总结为三种。 本地事务, 编程式事务和声明事务。 下面, 我们就分别谈谈这三种事务模式。 事务的ACDI 事务有atomicity, consistancy, isolation and durability. 原子性, 事务在一个单元操作中, 要么提交, 要么回滚。有时候, 我们把它叫做LUW(logic unit of wo...原创 2011-07-14 16:07:54 · 314 阅读 · 0 评论 -
JAVA事务三
一、事务概念 (1): 事务( Transaction )是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务, SQL Server 能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。 (2): 事务通常是以 BEGIN TRANSACTION 开始,以 COMMIT 或 ROLLBACK 结束。 ...原创 2011-07-14 16:05:23 · 122 阅读 · 0 评论 -
JAVA事务一
一、什么是Java事务 通常的观念认为,事务仅与数据库相关。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示 当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执...原创 2011-05-24 21:20:25 · 75 阅读 · 0 评论 -
TLS/SSL使用javamail
// get the mail configuration optionsString mailHost = servletConfig.getServletContext().getInitParameter( "mailHost" );String mailTo = servletConfig.getServletContext().getInitPara...原创 2012-07-05 13:06:36 · 276 阅读 · 0 评论 -
Java反射与动态代理
与javax.lang.model 不同的是,通过反射API可以获取程序在运行时刻的内部结构。反射API中提供的动态代理也是非常强大的功能,可以原生实现AOP 中 的方法拦截功能。正如英文单词reflection的含义一样,使用反射API的时候就好像在看一个Java类在水中的倒影一样。知道了Java类的内部 结构之后,就可以与它进行交互,包括创建新的对象和调用对象中的方法等。这种交互方式与直接在...原创 2011-04-15 10:54:01 · 81 阅读 · 0 评论 -
jvm内存管理之java堆溢出 -实例分析
java堆用于存储对象实例,我们只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清楚这些对象,就会在对象数量达到最大堆的容量限制后产生内存溢出异常。下面给出例子代码体验一下java堆溢出的过程:1.通过jvm参数(-Xms20M -Xmx20M -Xmn10M ),限制java 堆的大小2.通过jvm参数(-verbose:gc -XX:+Pr...原创 2013-07-13 22:56:53 · 108 阅读 · 0 评论 -
关于JVM 内存溢出的几个分析
之前看编程之美,看到了对操作系统精通的定义,比如,写个程序能到任务管理器的CPU曲线划出一段正弦曲线,这种实际的动手能力确实值得我们去关注。刚刚在看书,关于虚拟机规则的,突然想到可以出如下面试题:给出一段会产生堆内存溢出的代码;给出一段虚拟机栈和本地方法栈溢出的代码:分StackOverflowError和OutOfMemoryError给出程序;给出一段能使运行时常量池溢出...原创 2013-07-13 22:56:29 · 82 阅读 · 0 评论