- 浏览: 453629 次
- 性别:
- 来自: 北京
-
最新评论
-
IXHONG:
你好,现在改好了CoderDream 写道【(点击放大图像)】 ...
从0开始的微服务架构:(一)重识微服务架构 -
CoderDream:
【(点击放大图像)】图片在哪里?
从0开始的微服务架构:(一)重识微服务架构 -
IXHONG:
解释下虫洞和空间扭曲:打个比方,一张平面纸上,从A点到B点最捷 ...
Java生态研究(Spring Boot + Redis + Dubbo + RocketMQ) -
IXHONG:
mvn clean package -Dmaven.test. ...
Java生态研究(Spring Boot + Redis + Dubbo + RocketMQ) -
tracy0201:
大哥,你这个pom文件里的jar包有问题啊。mvn insta ...
Java生态研究(Spring Boot + Redis + Dubbo + RocketMQ)
文章列表
单例设计类:
Java代码
package com.test.singleton;
import java.io.IOException;
import java.io.ObjectStreamException;
import java.io.Serializable;
一.对象查找
在对对象回收之前,需要首先查找出亟待回收的对象,在JVM中,采取"根检索"算法来查找"死亡"的对象;这个算法的基本思想是通过一系列名为"GC Roots"的对象作为起始点,从这些节点开始向下 ...
JVM内存管理和JVM垃圾回收机制(1)
2010-09-26 16:42 cutesource blog.csdn.net 我要评论(0) 字号:T | T
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。
以下是本文目录大纲:
一.CountDownLatch用法
二.CyclicBarrier用法
三.Semaphore用法
若有不正之处请多多谅解,并欢迎批评指正。
请尊重作者劳动成果,转载请标明原文链接:
http://www.cnblogs.com/dolphin0520/p/3920397.html
一.CountDownLatch用 ...
一.ExecutorService:
它也是一个接口,它扩展自Executor接口,Executor接口更像一个抽象的命令模式,仅有一个方法:execute(runnable);Executor接口简单,但是很重要,重要在这种设计的模式上。。
ExecutorService在Executor的基础上增加了“service”特性的方法:
shutdown()、shutdownNow():都是关闭当前service服务,释放Executor的所有资源(参见实现类);它所触发的动作就是取消队列中任务的执行。shutdown是一种“友好”的关闭,它将不再(事实上是不能)接受新的任务提交 ...
一.CompletionService接口提供了可以操作异步任务的功能,其唯一实现的API为ExecutorCompletionService。此API只是可以获取异步任务执行的结果,它不是ExecutorService。
其有5个核心方法:
Future<V> poll():同步操作,获取并移除第一已经完成的任务,否则返回null。
Future<V> poll(timeout):同步操作,获取并移除第一个已经完成的任务,阻塞时间为timeout,否则返回null;支持InterruptedException。
Future<V> su ...
本文转载自http://shift-alt-ctrl.iteye.com/blog/1967020
关于JDBC中关于Connection的两个疑问:
1.Connection实例是线程安全的吗?
即一个connection实例,在多线程环境中是否可以确保数据操作是安全的?
Java代码
private static Connection connection;
上述代码,设计会不会有问题? 一个Connection实例,即对应底层一个TCP链接,有些开发者可能考虑到"性能",就将代码写成上述样式,最终 ...
本文转载自http://shift-alt-ctrl.iteye.com/blog/2194519
JAVA中BitSet就是“位图”数据结构,根据“位图”的语义,数据的存在性可以使用bit位上的1或0来表示;一个bit具有2个值:0和1,正好可以用来表示false和true。对于判断“数据是否存在”的场景,我们通常使用HashMap来存储,不过hashmap这个数据结构KEY和Value的保存需要消耗较多的内存,不适合保存较多的数据,即大数据场景;比如在有10亿条URL中判定一个“www.baidu.com/a”是否存在,如果我们使用常规的hashmap来保存将是不现实的,因为UR ...
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookeeper的目的就在于此。本文简单分析zookeeper的工作原理,对于如何使用zookeeper不是本文讨论的重点。
1 Zookeeper的基本概念
1.1 角色
Zookeeper中的角色主 ...
参考http://shift-alt-ctrl.iteye.com/blog/1845309
一.JAVA内存模型(JMM,JAVA Memory Model):
运行时涉及到两种内存,主内存和工作区内存,其中工作区内存通常为CPU的高速缓存区用来加快内存数据读取操作的(各线程独立).所有的变量内容都存在主内存中,当需要对内存数据进行操作时,数据将会从主存中load到工作区缓存并由CPU计算和赋值操作,然后再由工作区内存write到主存中,读取时如果工作区内存中已经有(loaded)则直接使用;工作区内存保存了线程使用的变量的副本,线程不可以直接操作主内存,只能操作工作区内 ...
本文转载自http://shift-alt-ctrl.iteye.com/blog/1841084
请首先参考:http://shift-alt-ctrl.iteye.com/blog/1839142
一.BlockingDeque阻塞双端队列(线程安全):
注意ArrayDeque和LinkedList仅仅扩展了Deque,是非阻塞类型的双端队列。
BlockingQueue单向队列, ...
在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态。然后等待消费者消费了商品,然后消费者通知生产者队列有空间了。同样地,当队列空时,消费者也必须等待,等待生产者通知它队列中有商品了。这种互相通信的过程就是线程间的协作。 ...
本文转载自http://shift-alt-ctrl.iteye.com/blog/1839163
前言:java提供了几种引用类型,以方便编程者跟踪对象生命周期。
Reference抽象类提供了除强引用之外的其他引用类型基本功能。ReferenceQueue是一个队列(内部实现为一个Reference的列表),用于注册那些GC检测到不可达(即将会被回收)对象。
每个reference对象都可以"注册"相关的引用对象,当此对象即将回收(已经回收),将会把此reference对象加入到referenceQueue中,对于外部程序,可以通过轮训qu ...
本文转载自http://shift-alt-ctrl.iteye.com/blog/1839147
在循环arrayLlist时,经常会遇到remove操作,那么arrayList的remove的底层是怎么做的?
AbstractList中,有一个属性modCount,这个属性是跟踪list中数据被修改的次数,任何对list的add/remove操作,都将导致modCount++.
在AbstractList中还有一个内部类Itr implements Iterator,Itr是一个list遍历的工具类,当然list.iterator()方法也是返回Itr对象,在Itr中有一个校 ...
package com.ixhong.base.thread;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreeConditionCommunication {
/**
* @param args
*/
public static void main(String[] args) {
...