自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

翻译 ZooKeeper Overview

zookeeper : 为分布式应用提供分布式协调服务zookeeper 为分布式应用提供了一个分布式、开源的协调服务。他提供了一系列的简单原语(指zookeeper的一些特性),分布式应用可以在这些原语之上实现更高级别的服务:同步、配置维护、集群管理、命名服务。组件设计易于使用,数据模型基于熟悉的文件目录树结构。分布式服务很难进行协调,很容易造成相互竞争以及死锁。zookeeper希望能够使...

2018-07-13 19:44:13 181

原创 head first 设计模式

观察者模式观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会通知并自动更新。 观察者模式是比较好理解的也好运用的一种设计模式,分为发布者和订阅者,订阅者可以自由的订阅或者取消而无需改动发布者。 Java 类库案例Java 提供了观察者模式的现成类库: java.util.Observable,java.util.Observer。有几个地方需要...

2018-07-11 00:52:41 184

原创 java HashMap 源码

内部数据结构hashMap 底层是一个 Node 类型的数组,Node 是一个单链表。但是当哈希冲突导致同一个位置的单链表长度超过 8 时,单链表会转换成红黑树:TreeNode ,以提高冲突后的检索效率。(TreeNode 是 Node 的子类)。/** * The table, initialized on first use, and resized as * necessar...

2018-04-09 01:03:13 329

原创 Spring AOP 和 AspectJ

AspectJAspectJ 是一个非常优秀的 AOP 框架,它扩展了 Java 语言并且定义了一套 SOP 的语法。因此,使用了 AspectJ 的 Java 项目需要使用 AspectJ 提供的编译器 Ajc 而不是 Javac 。AspectJ 编程有两种方式,使用扩展的语法或者是使用注解的方式。 、 在 Java 项目中单独使用 AspectJ 时,使用maven管理的项目需要依赖:as

2017-03-22 20:47:34 350

原创 java 日志框架总结

简介commons-logging(jcl) : apache 提供的日志框架接口,spring 默认使用的框架接口。现在已经很久没有更新了。slf4j : 也是一种日志框架接口,可以自由的选择具体的日志框架。和 commons-logging 实现方法不同,持续更新中。java.util.logging(jul) : java 自带的一个简单的日志框架。logback : 从 log4j

2017-03-17 17:06:07 791

原创 持有对象

链表arrayList:随机访问性能好,插入和删除效率差LinkedList:插入和删除效率高,随机访问性能差初始化// 1.使用 Arrays.asList 将数组转化为容器进行初始化,速度最慢List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(1,2,3));// 2.使用 Collection.addAll() 进行初

2017-02-06 21:32:04 258

原创 枚举

enum 的特征public enum ColorEnum { RED("红色"), BLUE("蓝色"), GREEN("绿色"), ; private String description; private static Random random = new Random(4l); ColorEnum(String description)

2017-02-04 20:53:53 179

原创 数组

数组与容器比较数组作为一个简单的线性序列,访问效率要优于容器,但是缺点是对象的大小不能改变。数组可以持有基本数据类型,但是容器只能持有包装类(但是由于自动拆箱和装箱,使得差别不大)。应该优先选择容器而不是数组,因为容器的灵活性要远远大于数组。除非性能已经成为瓶颈。数组创建的过程数组创建其实是分两步进行的: 1. 开辟一段空间,对于对象类型来说这段空间保存的是引用,而基本数据类型直接保存基本

2017-02-02 21:29:20 224

原创 异常处理

异常处理过程:使用 new 在堆上创建异常对象当前执行路径被终止,并从当前环境中弹出对异常对象的引用异常处理机制接管程序,并开始寻找异常处理程序继续执行 —— 将程序从错误状态中恢复 异常处理的两种基本模型:终止模型:假设错误非常关键,出错以后不能恢复,不能继续执行恢复模型:异常处理程序的工作是修正错误,然后重新调用出问题的方法Java 强制要求当调用的代码会抛出异常时,要么捕获

2017-02-01 13:24:11 154

原创 内部类

成员内部类 (普通非静态内部类)成员内部类不能包含 static 成员和 static 方法。也不能包含静态内部类。成员内部类可以访问外部类的成员和方法,他提供了一个访问外部类数据的钩子。在实现上内部类对象秘密包含了一个指向外部类对象的引用,所以成员内部类对象与外部类对象是紧紧关联的,只能通过外部类对象来创建成员内部类。在外部类的非静态方法中可以直接创建内部类,在其他地方必须指明内部类对

2017-01-27 11:23:30 174

原创 1 ~ 9 章

Java 除了基本类型之外,操纵其他元素都是对象。对对象的操作都是通过引用,两者的关系如同电视机与遥控器。引用是可以脱离对象单独存在的,但是这时遥控器并不起作用。引用保存在堆栈中,对象保存在堆中,基本数据类型保存在堆栈中。在作用域内定义的基本变量只可用于作用域前。{ int x = 12;}int y = x; //illegal在作用域内创建的对象,在作用域外引用消失了,但是创建的

2017-01-22 22:59:17 171

原创 idea 个人使用

常用系统设置显示工具栏:安装以后默认不显示顶部和两边的工具按钮 ,view -> toolbar 和 toolbuttons 。设置主题和系统字体:系统字体默认不支持中文,需要按需修改,appearance & behavior -> appearance 。设置编辑区字体大小:系统默认的字体太小了对眼睛不友好,editor -> colors & fonts -> font 。设置注释格

2016-12-21 16:49:48 480

原创 微观经济学

经济学十大原理人们面临权衡取舍:支出守恒,在某一方面的支出增加意味着在另一方面的支出减少;效率和平等的权衡,将资源平等的分配会导致蛋糕变小。某种东西的成本是为了得到他所放弃的东西:机会成本。理性人考虑边际量:根据边际成本和边际利益做出决策。人们会对激励做出反应:激励是引起一个人做出某种行为的某种东西,例如政策上的激励。汽油价格的增高会导致人们更多的购买小排量汽车的意愿。贸易可以使每个人变得

2016-12-20 21:02:11 5622 1

原创 鸟哥私房菜总结

Bashecho ${varName} 输出变量varName=varValue 设置变量unset varName 取消变量varName=${varName}:expendVarValue 扩展变量env 查看所有环境变量set 查看所有环境变量和自定变量export varName 将自定变量变成环境变量,环境变量可以在子程序中调用read varName 从键盘读取变量值a

2016-12-17 22:06:03 562

原创 java Lock(显示锁)

1.显示锁与内置锁对比内置锁在代码块调用结束后会自动释放锁,但是显示锁必须自己控制加锁和释放锁,因此使用显示锁更加危险(忘记释放锁)。内置锁不支持中断,阻塞的线程会一直等待直到拥有锁。而显示锁支持中断并且在处理锁的不可用问题上更加灵活(例如调用tryLock不会阻塞并且可以定时和轮询)。显示锁并不能代替内置锁,只有当内置锁不能满足需求是才可以考虑显示锁。内置锁要比显示锁更安全,内置锁作为JVM

2016-04-26 23:33:13 1464

原创 java Executor框架

1.为什么要使用线程池单线程执行任务必须串行的执行,那么如果某个任务需要很长的计算时间或者发生IO等阻塞,那么后面的任务必须长时间的等待。并且在多处理器环境中,单线程只占用一个处理器,其他处理器得不到利用。假设为每一个任务创建一个线程(即无限制的创建线程),任务执行完之后销毁线程。那么频繁的创建和销毁线程需要很大的开销;并且当线程的数量远大于处理器的数量时,大量的线程需要在内存中等待并占用内存;

2016-04-17 12:51:52 368

原创 java CyclicBarrier

Barrier和CountDownLatch有些类似,它能阻塞一组线程直到某个事件发生,但是Barrier阻塞的这组线程必须同时到达栅栏位置,才能继续执行。闭锁用于等待事件,而栅栏用于等待同组的其他线程。对应构造方法:CyclicBarrier(int parties)。parties对应阻塞的线程数量。Barrier还允许在所有线程都到达栅栏位置时,启动另外一个线程执行某些事情,等到这个线程执行

2016-04-13 17:13:55 293

原创 java Semaphore(信号量)

1.信号量用来累计唤醒的次数,从而不会产生notify信号丢失的问题。信号量也要指定初始信号的大小,acquire()方法将信号量的值减一,如果信号量的值小于等于零,那么调用线程会阻塞。而release()方法将信号量加一,并且不会产生阻塞。关键:信号量的取值,判断,修改以及可能发生的阻塞这一系列操作都是原子操作。2.信号量可以用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量,

2016-04-13 15:05:20 600

原创 java CountDownLatch(闭锁)

CountDownLatch的和join有类似之处,但是比join强大并且灵活许多。在实例化一个CountDownLatch时,需要设置一个初始计数,所有调用await()方法的线程都会阻塞直到计数减为零,countDown()方法每调用一次 ,计数减一直到减为零从而唤醒其他所有调用await()方法的线程。CountDownLatch的计数功能是一次性的,即它的计数减为零时,不能再重新设置它的

2016-04-12 20:35:07 261

原创 线程间协作:wait,notify,notifyAll,join,yield

wait1.wait,notify,notifyAll是Object类的方法。在使用时必须包含在synchronized方法中或者同步块中。即必须先获得正确的对象锁,调用wait后,会释放自己占有的锁并且加入到等待池中等待。直到有其他线程调用同一个对象的notify/notifyAll方法才会唤醒。如果在没有获得对象锁之前调用wait,notify,notifyAll会抛出IllegalMonito

2016-04-12 18:01:30 413

原创 阻塞方法与中断方法

1.线程可能在执行过程中阻塞或者暂停执行,例如等待IO结束,等待获得一个锁,等待从Thread.sleep方法中醒来,或者等待另一个线程的计算结果。2.阻塞方法:BlockingQueue的put和take方法会抛出收检查异常:InterruptedException。还有类似的方法如Thread.sleep。抛出InterruptedException的方法叫做阻塞方法。如果这个方法被中断,他将努

2016-04-12 11:48:25 4478

原创 只读共享

前面讲了保证线程安全的两种思路:安全的共享(保证同步)和线程封闭(不共享也就不存在线程安全的问题)。还有一种思路是共享只读的数据(不可更改当然没有一致性的问题)。并发编程书中强调了不可变对象一定是线程安全的。

2016-04-03 12:34:26 381

原创 java ThreadLocal及线程封闭

当访问共享的可变数据时,需要使用同步机制。那么换一个思路,不共享对象就可以避免使用同步机制。1.栈封闭java中基本类型的局部变量及对象引用是保存在java栈中并且是线程隔离的,因此,在方法中全部使用基本类型的局部变量并且保证对象的引用不会逸出,那么就可以确保其他线程不能访问到,因此就不需要同步机制。2.ThreadLocal使用ThreadLocal共享数据其实并不是共享同一个数据,而是为每一个线

2016-04-01 21:37:13 303

原创 java volatile变量

valatile用来修饰共享变量,是一种弱的同步机制,用来确保将变量的更新操作通知到其他线程。volatile实现原理首先看一段代码:public class SynchronizedExample { //一个控制变量,作为print方法的结束控制 private boolean asleep = false; public void print() { w

2016-04-01 18:27:54 262

原创 java synchronized内置锁

java提供了内置锁来支持原子操作,synchronized可以修饰静态方法,成员方法以及一段代码块。当线程调用同步方法或者同步代码块时,需要先获内置锁,调用结束释放这个锁之后其他线程才能接着获得锁并调用。synchronized修饰静态方法synchronized修饰静态方法时,获得的是Class对象的锁,与具体的实例对象的内置锁并不冲突。public class SynchronizedExam

2016-04-01 15:08:56 591

原创 java 线程创建的方法

这几天开始学习java并发编程实战,发现这本书理论知识很多,实践并不多,而且基本知识貌似默认大家是知道的。所以边看边学习一下基础知识。1.首先看下官方API文档的介绍:JVM允许在一个程序中同时有多个运行的线程。每个线程都有一个优先级(priority),优先级高的线程运行时要优先于优先级低的线程,每个线程要么是守护线程,要么不是。当一个线程在运行时创建另一个线程是,新线程最初的优先级和创建它的

2016-03-26 01:40:44 204

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除