- 浏览: 5863 次
- 性别:
- 来自: 北京
最新评论
文章列表
13.访问者模式
访问者模式也称为Visitor模式,使用这种模式后可以在不修改已有程序结构的前提下,通过额外添加“访问者”来对已有代码的功能实现提升。表示一个作用于某对象结构中的各元素的操作。它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
构成访问者模式的角色如下:
1.访问者角色(Visitor):为该对象结构中的具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。
2.具体访问者角色(Concrete Visitor):实现每个由访问者角色(Visitor)声明操作 ...
8.命令模式
命令模式即Command模式,此模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数。将一个请求封装为一个对象,从而使我们可用不同的请求对用户进行参数化;对请求排队或记录请求日志,以及支持可 ...
3.桥梁模式
桥梁模式:桥梁模式是一个非常重要的模式,也是一个比较复杂的模式。熟悉这个模式对于理解面向对象的设计原则,包括“开-闭”原则(OCP)以及组合/聚合复用原则(CARP)很有帮助。
桥梁模式的用意是“将抽象化与实 ...
二十三种设计模式包括工厂模式、建造者模式、工厂方法模式、原始模型模式、单例模式、适配器模式、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、责任链模式、命令模式、解释器模式、迭代子模式、调 ...
1.Immutable Object (不可变对象) 模式
多线程共享变量的情况下,为了保证数据一致性,往往需要对这些变量的访问进行加锁。而锁本身又会带来一些问题和开销。Immutable Object模式使得我们可以在不使用锁的情况下,既保证共享变量访问的线程安全,又能避免引入锁可能带来的问题和开销。
Immutable Object模式简介
多线程环境中,一个对象常常会被多个线程共享。这种情况下,如果存在多个线程并发地修改该对象的状态或者一个线程读取该对象的状态而另外一个线程试图修改该对象的状态,我们不得不做一些同步访问控制以保证数据一致性。而这些同步访问控制,如显式锁和CAS操作,会 ...
14、对象锁
1. 对象锁
所有对象都自动含有单一的锁。
JVM负责跟踪对象被加锁的次数。如果一个对象被解锁,其计数变为0。在任务(线程)第一次给对象加锁的时候,计数变为1。每当这个相同的任务(线程)在此对象上获得锁时,计数会递增。
只有首先获得锁的任务(线程)才能继续获取该对象上的多个锁。
每当任务离开一个synchronized方法,计数递减,当计数为0的时候,锁被完全释放,此时别的任务就可以使用此资源。
2. 类锁
对于同步静态方法/静态变量互斥体,由于一个class不论被实例化多少次,其中的静态方法和静态变量在内存中都只由一份。所以 ...
目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。
13、偏向锁和轻量级锁、锁粗化、锁消除、锁膨胀
因为这几个概念连续非常 ...
9、悲观锁
悲观锁,就是不管是否发生多线程冲突,只要存在这种可能,就每次访问都加锁,加锁就会导致锁之间的争夺,有争夺就会有输赢,输者等待。
syncrhoized是一种独占锁,即:占用该锁的线程才可以执 ...
5、读写锁
相比Java中的锁(Locks in Java)里Lock实现,读写锁更复杂一些。假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该 ...
锁
java 多线程的锁我是感觉是一个非常有难度的知识点,多线程的锁有十几种,以前我在面试的时候就有面试官问过我了不了解多线程锁,我当时想锁有什么难的啊,不就常用的那几种嘛,结果我直接就回到深入研究过,然后这 ...
线程状态转化图
这个图我觉得应该是市面比较通俗易懂的多线程状态转换图,wait()和sleep()的区别显而易见,wait会释放锁然后等待notify()、notifyAll()才会激活然后等待获得该对象锁之后进入可运行状态,而sleep()则是在指定的时 ...
上节说到final、volatile、synchronized这三个关键字,个人感觉这三个关键字应该是在多线程中使用的非常频繁的,并且也是最基础的实现多线程时会用到的技术。所以下面来详细的详解下这三个关键字到底能在多线程的情景下做些什么事情!
synchronized:
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
...
很多人都对其中的一些概念不够明确,如同步、并发等等,让我们先建立一个数据字典,以免产生误会。
多线程:指的是这个程序(一个进程)运行时产生了不止一个线程
并行与并发:
并行:多个cpu实例或者多台机器同时执行 ...
AtomicBoolean源码分析
Java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作,主要提供了以下功能:
1、通过Unsafe类可以分配内存,可以释放内存;
2、可以定位对象某字段的内存位置,也可以修改对象的字段值,即使它是私有的;
3、挂起与恢复
4、CAS操作:是通过compareAndSwapXXX方法实现的
详细内容请参考http://www.cnblogs.com/mickole/articles/3757278.html
unsafe.objectFieldOffset(AtomicBoolean.class.getD ...