类ReentrantLock具有完全互斥排他的效果,即同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务。这样做虽然保证了实例变量的线程安全性,但效率却是非常低下的。所以在JDK中提供了一种读写锁ReentrantReadWriteLock类,使用它可以加快运行效率,在某些不需要操作实例变量的方法中,完全可以使用读写锁ReentrantReadWriteLock来提升...
分类:
编程语言 时间:
2016-05-13 01:12:59
阅读次数:
202
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
1.)某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2.)省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3.)有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统...
分类:
编程语言 时间:
2016-05-13 00:27:56
阅读次数:
150
可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程。这样的组织结构有些类似于树的形式,如图所示。
线程组的作用是,可以批量的管理线程或线程组对象,有效地对线程或线程组对象进行组织。
1、线程对象关联线程组:1级关联
所谓的1级关联就是父对象中有子对象,但并不创建子孙对象。这种情况经常出现在开发中,比如创建一些线程时,为了有效地...
分类:
编程语言 时间:
2016-05-12 22:00:18
阅读次数:
239
在标准的23个设计模式中,单例设计模式在应用中是比较常见的。但在常规的该模式教学资料介绍中,多数并没有结合多线程技术作为参考,这就造成在使用多线程技术的单例模式时会出现一些意想不到的情况,这样的代码如果在生产环境中出现异常,有可能造成灾难性的后果。
1、立即加载/“饿汉模式”
什么是立即加载?立即加载也称为“饿汉模式”,就是使用类的时候已经将对象创建完毕,常见的实现办法就是直接...
分类:
编程语言 时间:
2016-05-12 21:21:59
阅读次数:
218
前面讲的用DCL可以解决多线程单例模式的非线程安全,虽然看下去十分完美,但还是有一些问题,具体分析看这篇:http://blog.csdn.net/ochangwen/article/details/51348078
当然用其他的办法也能达到同样的效果。
1、使用静态内置类实现单例模式
public class Singleton {
/* 私有构造方法,防止被实例化...
分类:
编程语言 时间:
2016-05-12 21:02:23
阅读次数:
409
线程对象在不同的运行时期有不同的状态,状态信息就存在于Thread内部类的State枚举类中
public enum State {
/**
* new状态是线程实例化后还从未执行start()方法时的状态
*/
NEW,
/**
* runnable状态是线程进人运行的状态
...
分类:
编程语言 时间:
2016-05-12 20:49:46
阅读次数:
238
类SimpleDateFonnat主要负责日期的转换与格式化,但在多线程的环境中,使用此类容易造成数据转换及处理的不准确,因为SimpleDateFormat类并不是线程安全的。
1.出现异常
本示例将实现使用类SimpleDateFormat在多线程环境下处理日期但得出的结果却是错误的情况,这也是在多线程环境开发中容易遇到的间题。
public class MyThread ext...
分类:
编程语言 时间:
2016-05-12 12:11:39
阅读次数:
141
一、何为“内存模型”
内存模型描述了程序中各个变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节,对象最终是存储在内存里面的,但是编译器、运行库、处理器或者系统缓存可以有特权在变量指定内存位置存储或者取出变量的值。
二、JMM(Java Memory Model)即Java内存模型的作用
JMM的最初目的是为...
分类:
编程语言 时间:
2016-05-03 18:08:44
阅读次数:
195
一、何为“内存模型”内存模型描述了程序中各个变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节,对象最终是存储在内存里面的,但是编译器、运行库、处理器或者系统缓存可以有特权在变量指定内存位置存..
分类:
编程语言 时间:
2016-05-03 12:50:05
阅读次数:
178
线程的优先级:线程的优先级分为三种,分别是:1-MIN_PRIORITY10-MAX_PRIORITY5-NORM_PRIORITY如果什么都不设置默认值是5线程的优先级可以影响线程的执行顺序,当然这里指的是有可能影响,不会一定影响。在默认状态下(比如说主线程)它的默认值是5具体代码演示:packagecom.ye..
分类:
编程语言 时间:
2016-05-02 00:45:12
阅读次数:
236