
java
文章平均质量分 71
shuangyue
这个作者很懒,什么都没留下…
展开
-
volatile变量
1.volatile的原理 volatile的原理实际上是告诉处理器,不要把变量缓存在寄存器或者相对于其他处理器不可见的地方,而是把变量放在主存,每次读写操作都在主存上进行操作。另外,被申明为volatile的变量也不会与其它内存中的变量进行重排序。 2.volatile与同步 volatile是同步的一个子集,只保证了变量的可见性,但是不具备原子特性。这就是说线程能够自动发现 vo原创 2013-02-07 09:08:53 · 1503 阅读 · 1 评论 -
java concurent之BlockingQueue
从名字上看,BlockingQueue是阻塞队列的意思 这个队列主要提供下面的功能: 阻塞队列提供了可阻塞的take和put方法,另外可定时的poll和offer实际原理也是一样的。 如果BlockingQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒,同样,如果BlockingQueue是满的,任何试图往里存原创 2013-02-07 09:31:04 · 606 阅读 · 0 评论 -
java concurrent之CompletionService
在采用Executor执行任务时,可用通过采用Future来获取单个任务执行的结果,在Future中提供了一个get方法,该方法在任务执行返回之前,将会阻塞。 当向Executor提交批处理任务时,并且希望在它们完成后获得结果,如果用FutureTask,你可以针对这一组任务进行遍历,并用future.get()去获取结果,若当前任务没有完成,则会造成阻塞。这对于对任务结果需要分别对待的时候原创 2013-02-07 09:25:01 · 471 阅读 · 0 评论 -
java.util.concurrent包之Lock
在java5.0以前都是采用synchronized关键字进行同步控制,所有对象都自动含有单一的锁,JVM负责跟踪对象被加锁的次数。如果一个对象被解锁,其计数变为0。在任务(线程)第一次给对象加锁的时候,计数变为1。每当这个相同的任务(线程)在此对象上获得锁时,计数会递增。只有首先获得锁的任务(线程)才能继续获取该对象上的多个锁。每当任务离开一个synchronized方法,计数递减,当计数为0的原创 2013-05-25 19:24:51 · 678 阅读 · 0 评论 -
线程安全中应该注意的点
何谓线程安全? 在《java 并发编程实践》中对线程安全的定义如下: 当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替运行,并且不需要额外的同步及在调用方代码不必做其他的协调,这个类的行为仍然是正确的,那么这个类就是线程安全的。 很多时候,在单线程环境下很稳定的程序,到了多线程环境下,往往就变得不安全了。 1. 完全由线程安全的类构成的程序不一定就是线程安全的原创 2013-05-25 17:41:09 · 1084 阅读 · 0 评论 -
利用instrument+Attach API+javassist动态改变方法逻辑
1 instrument instrument是jdk 1.5之后提供的一个功能,它通过代理的方式运行在 JVM 上的程序的服务。作为代理的类必须首先打成jar包。在jdk1.6中支持两种方式来启动代理: (1) 在程序启动的时候添加-javaagent:jarpath=options参数指定代理的jar来启动代理,这种情况下 代理入口类通过在META-INF/MENIFEST.原创 2013-02-07 09:43:03 · 3125 阅读 · 1 评论