本月博客排行
-
第1名
龙儿筝 -
第2名
lerf -
第3名
fantaxy025025 - johnsmith9th
- xiangjie88
- zysnba
年度博客排行
-
第1名
青否云后端云 -
第2名
宏天软件 -
第3名
gashero - wy_19921005
- vipbooks
- benladeng5225
- e_e
- wallimn
- javashop
- ranbuijj
- fantaxy025025
- jickcai
- gengyun12
- zw7534313
- qepwqnp
- 解宜然
- ssydxa219
- zysnba
- sam123456gz
- sichunli_030
- arpenker
- tanling8334
- gaojingsong
- kaizi1992
- xpenxpen
- 龙儿筝
- jh108020
- wiseboyloves
- ganxueyun
- xyuma
- xiangjie88
- wangchen.ily
- Jameslyy
- luxurioust
- lemonhandsome
- mengjichen
- jbosscn
- zxq_2017
- lzyfn123
- nychen2000
- forestqqqq
- wjianwei666
- ajinn
- zhanjia
- Xeden
- hanbaohong
- java-007
- 喧嚣求静
- mwhgJava
- kingwell.leng
最新文章列表
线程池简单实现
其实线程池的实现就是生产者消费者问题
的实现,理解了生产者消费者问题
就不会对线程池的实现感到神秘了,线程池在很多地方会用到,比如
tomcat
等各种中间容器的实现,
Spring
对线程池的支持等,当然
mina
中也使用到了线程池的概念。
看下简单对线程池的实现代码,主要包括三个类,一个是线程池,一个是工作任务,一个是客户端进行任务添加。
任务类,比较简单,实现
...
同步器--Exchanger
用于实现两个线程间的数据交换,每个线程在完成一定的任务后想与对方交换数据,第一个先拿出数据的线程将一直等待第二个线程拿着数据到来时,才能彼些交换数据.
public class ExchangerTest {
public static void main(String[] args) {
final Exchanger<String> exchanger = new Exc ...
同步器--CountDownLatch
CountDownLatch像倒计时计数器,调用它的countDown()方法就将计数器减1,当达到0时,所有等待者开始执行,
可以实现一个人通知多人,如裁判,也可以实现一个计划要多个领导签字后才能继续向下实施的情况.
public class CountdownLatchTest {
public static void main(String[] args) {
ExecutorS ...
同步器--CyclicBarrier
/**
* 淘宝面试题:如何充分利用多核CPU,计算很大的List中所有整数的和
* @author weistar
*
*/
public class CountListIntegerSum {
private long sum;// 存放整数的和
private CyclicBarrier barrier;// 障栅集合点(同步器)
private List< ...
同步器--Semaphore
它可以维护当前访问自身的线程个数,并提供了同步机制,使用它可以控制同时访问资源的线程个数,如实现一个文件允许的并发访问数.
单个信号灯对象可以实现互斥锁的功能,并且可以是由一个线程获得了"锁",再由另一个线程释放"锁",可应用于死锁恢复的场合.
注:还有另一个构造器Semaphore(int permits, boolean fair),其中fair为tr ...
使用Condition实现多路等待通知
一个锁内部可以有多个Condition,即有多路等待和通知,可参考JDK1.5的Lock和Condition实现的可阻塞队列的应用案例,在传统的线程机制中一个监视器对象上只能有一路等待和通知,要想实现多路等待和通知,必须嵌套使用多个同步监视器对象.
使用Condition可简单实现多路等待通知
public class TwoConditionCommunication {
publi ...
使用readLock与writeLock实现缓存
锁妙用:
读写锁:分为读锁和写锁,多个读锁不能互斥,读锁与写锁互斥,写锁与写锁互斥,这是由JVM自己控制的,只要上好相应的锁即可,如果你的代码只读数据,可以多人同时读,但不能同时写,那就上读锁;如果要修改数据,只能有一个人在写,且不能同时读取,那就上写锁,总之,读的时候上读锁,写的时候上写锁.
如使用readLock与writeLock实现缓存
public class CacheDemo { ...
Callable与Future应用
应用于异步的任务执行,类似JS的回调方法.
Future取得的结果类型与Callable返回的结果类型必须一致.
如异步执行方式:
public class FutureTaskDemo {
public static void main(String[] args) {
// 初始化一个Callable对象和FutureTask对象
Callable<Object& ...
线程间通信
传统线程间通信
// 传统的线程通信
public class TraditionalThreadCommunication {
public static void main(String[] args) {
final Business business = new Business();
new Thread(new Runnable() {
@Override ...
Java认证JVM基础概念:数据类型和堆与栈
数据类型
Java
虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;
而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。
基本类型包括:byte
, short
, int
, long
, char
, float
, double
...
Java 序列化的高级认识
将 Java
对象序列化为二进制文件的 Java
序列化
技术是 Java
系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable
接口,使用 ObjectInputStream
和 ObjectOutputStream
进行对象的读写。然而在有些情况下,光知道这些还远远不够。如果你只知道实现 Seria ...
java enum 浅析
java
中的枚举类型包括了其他语言中枚举类型的一般特性。
public class EnumDemo{
public enum Seasons {
winter,spring,summer,fall;
}
public static void ...
JAVA Appliation下取得资源文件的路径
今天要写一个单元测试,这个单元测试类要去读和它同目录的一个XML
文件。它的位置如下:
ConfigFactoryImplTest
要去读取boss-connector-service.xml
。
那么如果得到这个文件呢?先看下面的一个对路径的测试代码
import java.io.File;
public class PathTest {
publi ...