Fail-Fast和Fail-Safe机制

1 Fail-Fast 1.1 fail-fast定义 fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件 例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件 1.2 Iterator与fast-fail机制 1.2.1 Iterator的好处 java源码中迭代器模式主要用于集合的迭代,只要实现了Collection接口就可以使用迭代器去遍历获取元素,这样我们不需要了解遍历的内部实现细节。 比如下面的 ArrayList 和 ImmutableList 遍历的例子:

实际项目运用之Adapter模式(适配器模式)

1. 模式简介 适配器模式解决的问题:让原本因为接口不兼容而不能一起工作的类可以一起工作 适配器模式中有三种角色: 目标接口Target:用户期望的类,可以是接口,也可以是抽象类或具体类; 需要适配的类Adaptee:当前系统中有的类; 适配器Adapter:在现有接口和目标接口之间的“适配者” 适配器模式的优点: 通过适配器模式,用户在做相似的操作时可以调用同一个接口,其内部过程对于用户是透明的,这样做更简单、更直接、更解耦; 复用了现存的类,解决了现存类和复用环境要求不一致的问题; 将目标接口和现有接口解耦,通过引入一个适配器类,而无需修改原有的代码。

设计模式之Template模式(模版模式)

1 模式简介 1.1 模版方法模式的定义: 模版方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 1.2 结构 1.3 模式的组成 抽象类(AbstractClass): 定义抽象的原语操作(primitive operation) ,具体的子类将重定义它们以实现一个算法, 实现一个模板方法,定义一个算法的骨架。该模板方法不仅调用原语操作,也调用定义。 具体子类 (ConcreteClass): 实现原语操作以完成算法中与特定子类相关的步骤。

synchronized实现原理及锁优化

1.引言 并发编程中synchronized是重量级锁,但随着JVM1.6对synchronized进行优化后,有些情况下它并不那么重,本文介绍了Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。 2.术语定义 CAS(Compare and Swap): 比较并交换。用于在硬件层面上提供原子性操作。在 Intel 处理器中,比较并交换通过指令cmpxchg实现。比较是否和给定的数值一致,如果一致则修改,不一致则不修改。 3.同步的基础 Java中的每一个对象都可以作为锁。 对于同步方法,锁是当前实例对象。 对于静态同步方法,锁是当前对象的Class对象。 对于同步方法块,锁是synchonized括号里配置的对象。

JUC知识点总结

作为并发的基础,我们需要熟悉掌握JUC相关的知识,才能更好的在实际项目中运用, 下面是整理出来的juc思维导图: #系列文章 java内存模型之[JMM][重排序][happens-before] volatile关键字原理实现及应用 synchronized实现原理及锁优化 =============不定期更新============================

实际项目运用之Strategy模式(策略模式)

1. 策略模式概要 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。 下面就以一个示意性的实现讲解策略模式实例的结构。  这个模式涉及到三个角色:  ● 环境(Context)角色:持有一个Strategy的引用。  ● 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。  ● 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。

volatile关键字原理实现及应用

1.并发编程中的三个概念 在并发编程中, 需要了解线程的三个概念:原子性,可见性,有序性: 1.1.原子性 原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 一个很经典的例子就是银行账户转账问题: 比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。 试想一下,如果这2个操作不具备原子性,会造成什么样的后果。假如从账户A减去1000元之后,操作突然中止。然后又从B取出了500元,取出500元之后, 再执行 往账户B加上1000元 的操作。这样就会导致账户A虽然减去了1000元,但是账户B没有收到这个转过来的1000元。 所以这2个操作必须要具备原子性才能保证不出现一些意外的问题。  同样地反映到并发编程中会出现什么结果呢?

MYSQL高级特性之【Event事件】

一、基本概念 mysql5.1版本开始引进event概念。event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发。通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或存储过程。 二、适用范围 对于每隔一段时间就有固定需求的操作,如创建表,删除数据等操作,可以使用event来处理。 例如:使用event在每月的1日凌晨1点自动创建下个月需要使用的三张表。 每天清除数据表中的过期的记录。 三、使用权限 单独使用event调用SQL语句时,查看和创建需要用户具有event权限,调用该SQL语句时,需要用户具有执行该SQL的权限。Event权限的设置保存在mysql.user表和mysql.db表的Event_priv字段中。 当event和procedure(存储过程)配合使用的时候,查看和创建存储过程需要用户具有create routine权限,调用存储过程执行时需要使用excute权限,存储过程调用具体的SQL语句时,需要用户具有执行该SQL的权限。 查看EVENT命令有如下几种: >(1)查询mysql.event表; (2)通过SHOW EVENTS命令; (3)通过SHOW FULL EVENTS命令; (4)通过查询information_schema.

MYSQL高级特性之【存储过程与函数】

一、定义 存储程序可以分为存储过程和函数。 1.1 存储过程的定义 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集。存储过程在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 1.2 函数的定义 存储函数(简称函数)在本质上与存储过程没有区别。 只是函数有如:只能返回一个变量的限制,而存储过程可以返回多个。函数是可以嵌入在SQL中使用,可以在select中调用,而存储过程不行。 二、创建存储过程和函数 存储过程和函数的创建过程很相似。 2.1 创建存储过程 语法 >CREATE PROCEDURE sp_name ([ proc_parameter ]) [ characteristics.

分布式之【CAP理论、BASE理论 、FLP不可能定理】

1.分布式系统的CAP理论 1.1 CAP理论概述 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。 一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。 1.2 CAP的定义 1.2.1 Consistency 一致性 一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。分布式的一致性