- 博客(8)
- 收藏
- 关注
原创 并发之aqs
1、什么是aqs呢?aqs是java并发包中的队列同步器,他是构建锁的基本框架,比如ReentrantLock就是基于其实现的。2、为什么使用aqs?java 5.0之前的synchronized的没有做过锁优化的,其效率较低,后来就出来ReentrantLock显示锁采用aqs的方式进行了优化,当然java 6的时候synchronized关键字做了优化了,下面看一张图:当然ReentrantLock还有其他优势是synchronized所没有的,比如中断阻塞等,这个以后会写一篇博客专门讲Ree
2020-07-26 22:00:32
344
原创 设计不可变类
1、介绍不可变类不可变类指的是其实例不能被修改的类,每个实例所包含的信息必须在创建该实例的时候就确定下来,并且在对象的整个生命周期内不可修改!Java类库中有比如String、包装类等都是不可变类。2、设计原则不要提供任何修改对象状态的方法,比如set方法。保证类不被拓展,因为无论是粗心还是恶意地使用子类是可以假装对象的状态已经改变。一般来说有两种方式解决这个问题,其一将类设计成final...
2020-05-05 08:24:33
336
原创 java拓展类方式的选择
1、代理是继承和组合的中庸之道有时候继承会有一些安全问题,特别是跨包的继承,这个后面我们详细讲解。这时候就只能使用组合的方式拓展类,但是组合的缺点是没有暴露出父类的方法,虽然你定义了父类的域,但是新的拓展类中看不到父类的方法,这时候代理,或者说委托方式就出现了。话不多说,上代码!下面展示一些 内联代码片。/** * 飞船控制类 */public class SpaceShipContr...
2020-04-27 21:20:24
274
原创 java泛型使用建议
1、建议不要使用原生态类型,很容易出现类型转换异常有些人不能理解原生态的List 和 List(Object)有什么区别?区别在于使List(Object)等于告知编译器该集合可以放置任何类型元素,但是你无法将类型为List(String)集合或者其他类型元素的List传递给List(Object),因为他是类型安全的集合,但是你能将List(String)传递给原生态list,实际上你使用Li...
2020-04-19 20:02:20
201
原创 静态工厂代替构造器
也许你很早就听说过静态工厂了,可是他有什么用呢?下面我将分享自己从树上得到的心得,本文所指的是静态工厂和设计模式种的工厂方法不同。 1、静态工厂与构造器相比有名称 有名称可读性就好 2、复用对象 也许你并不想每次都new一个对象,比如Boolean.valueOf()用的就是这种方法,缓存了一个对象,供调用者获取,而不是每次显示创建。另外,你也许想要做可控的实例,什么是可控呢,...
2020-03-27 13:01:32
112
原创 java内部类与回调
最近看了java编程思想一书,对内部类的设计感到惊叹,针对java采用内部类来实现回调比c语言更灵活(c语言通过指针来实现),下面博主分享下自己的一些心得,可能未必完全正确,如果有不对的地方,希望大家指出改正。 首先,要说的是内部类的特性,普通的成员内部类隐式链接到外部类,因此拥有外部类的所有元素的访问权的,正是因为这个特性,内部类对象也是一个闭包。闭包指的是一个可调用的对象,它记...
2019-04-14 22:24:19
302
原创 实体bean中为什么使用get set方法
先看一个下面的例子public class Father {private int i;public int getI() { return i;}public void setI(int i) { //保证数据安全 疑问是子类继承的话会改变父类的I值吗 if (i>0){ this.i = i; }}}这里i只能是数据大...
2019-04-14 12:37:29
656
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人