自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Lucky_xiang

The harder you work, the luckier you will .

  • 博客(57)
  • 资源 (1)
  • 问答 (7)
  • 收藏
  • 关注

转载 一文看懂LongAdder原理

前面介绍了Java中的一些原子类,但是基本都是通过CAS来实现原子性操作,白白浪费CPU资源。JDK8中新增了一个原子性递增或者递减类LongAdder用来克服高并发下使用AtomicLong的缺点。LongAdder的思路是把一个变量分解为多个变量,让同样多的线程去竞争多个资源。如图所示:使用LongAdder时,内部维护了多个Cell变量,每个Cell里面有一个初始值为0的long型变量,这样同时争取一个变量的线程就变少了,而是分散成对多个变量的竞争,减少了失败次数。如果竞争某个Cell变.

2021-09-17 10:00:24 2550

原创 设计模式(四)之模板方法模式

[设计模式(三)之抽象工厂模式](https://blog.csdn.net/zxyy2627/article/details/108742126)设计模式(四)之模板方法模式前言什么是抽象工厂模式?一、模板方法模式什么是模板方法模式?二、代码示例1.模板方法模式示例2.通用代码模板方法模式的结构模板方法模式的注意事项:总结前言什么是抽象工厂模式?抽象工厂模式相比于工厂方法模式是为了提高产品分级的扩展性。根据前面的学习,知道在简单工厂模式和工厂方法模式是为了创建对象而建立,这两个模式容易添加.

2020-09-23 15:30:55 169

原创 设计模式(三)之抽象工厂模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档设计模式(三)之抽象工厂模式前言什么是简单工厂模式?什么是多工厂类的工厂方法模式?一、什么是抽象工厂模式?二、示例1.女娲造人示例2.通用代码三、抽象工厂模式的优缺点抽象工厂模式的优点:抽象工厂模式的缺点:注意事项:总结:前言上一节学习到了工厂方法模式,工厂方法模式也有几个扩展。1.简单工厂模式2.多个工厂的工厂方法模式回顾一下,上一节的内容:什么是简单工厂模式?简单工厂模式包含一个工厂类,使用静态方法创建对象,因为只有一

2020-09-22 23:00:47 369

原创 设计模式(二)之工厂方法模式

设计模式(一)之单例模式Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory method lets a class defer instantiation to subclass;定义一个接口用于创建对象,但是让子类决定实例化哪个类。工厂使一个类的实例化推迟到子类。工厂模式...

2020-09-22 11:20:09 180

原创 设计模式(一)之单例模式

设计原则之单一职责原则设计原则之里氏替换原则设计原则之依赖倒置原则设计原则之接口隔离原则设计原则之迪米特法则设计原则之开闭原则单例模式一般情况下,一个国家只有一个皇帝。public class Emperor { private static final Emperor emperor = new Emperor(); private Emperor() { } public static Emperor getInstance() { .

2020-09-05 20:20:08 180

原创 设计原则之开闭原则

定义:Software entities like classes,modules and functions should be open for extensions but closed for modifications.一个软件实体如类,模块甚至方法应该对扩展开放,对修改关闭。解释:对扩展开放?开放什么?对修改关闭?如何关闭?什么是开闭原则?开闭原则的定义:软件实体应该对扩展开放,对修改关闭。意思就是软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。软件实体包括.

2020-09-05 18:15:28 865

原创 设计原则之迪米特法则

迪米特法则定义:一个对象应该对其他对象有最少的了解。迪米特法则的要求1.只和直接的朋友交流什么是朋友?每个对象必然都会与其他对象有耦合关系,两个对象之间的耦合就是朋友关系。这种关系的类型有组合,聚合,依赖。但是迪米特法则要求,只和直接朋友交流。实例:老师让体育委员清点班上的女生的人数。 public class Teacher { public void commond(GroupLeader groupLeader) { List<Gir

2020-08-29 23:46:49 316

原创 设计原则之接口隔离原则

接口隔离原则定义:客户端不应该依赖它不需要的接口类间的依赖关小应该建立在最小的接口上什么是接口?1.实例接口:Person zhangsan = new Person();类Person就是zhangsan的实例接口。2.类接口,就是通常意义上,用interface关键字定义的接口。解释:根据接口隔离原则的定义:事实上就是建立单一接口,不要建立臃肿的接口。接口尽量细化,同时接口中的方法尽量少。接口隔离原则和单一职责原则接口隔离原则讲的是不论是实例接口也好,还是类接口也好,都要做

2020-08-29 22:26:46 221

原创 设计原则之依赖倒置原则

依赖倒置原则定义1.高层模块不应该依赖低层模块,两者都应该依赖于抽象2.抽象不应该依赖于细节3.细节应该依赖于抽象解释:1.什么是低层模块?就是原子逻辑组成低层模块。2.什么是高层模块?就是原子逻辑的再组装,就变成了高层模块。3.什么是抽象?抽象就是接口或者抽象类。4.什么是细节?细节就是实现类。那上面三句话的意思就是:高层模块不依赖低层模块,容易理解,模块之间的依赖应该通过接口或者抽象类,而不应该通过实现类抽象不应该依赖细节,就是说接口或者抽象类不应该依赖于实现类细节

2020-08-29 17:16:55 424

原创 设计原则之里氏替换原则

里氏替换原则定义:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有对象o1都替换成o2时,程序P的行为没有发生变化,那么类型S就是类型T的子类型。所有引用基类的地方必须能透明地使用其子类对象。首先看继承的优缺点:继承的优点1.代码共享,提高代码的复用性,每个子类都拥有父类的属性和方法2.子类虽然拥有父类的方法,但是也可以拥有自己的特性。即可扩展性继承的缺点1.继承有侵入性,只要继承,那么就会拥有父类的属性和方法2.因为子类拥有父类的属性和方法,所

2020-08-27 23:51:05 291

原创 设计原则之单一职责原则

#单一职责原则什么是单一职责原则定义:有且仅有一个使接口或类产生变化的原因。也就是说我们使类或接口变化,只能有一个理由。但是在实际开发的过程中,我们很容易做到接口单一职责,很难做到类单一职责。例如:我们以查询数据,处理数据,返回数据为例。如果我们这样设计一个接口:public interface IUserBO{ List selectData(); List dataProcessing(); List returnData();}public class Us

2020-08-19 00:15:54 153

原创 Spring高级装配(二)

bean的作用域在默认情况下,spring应用上下文中所有的bean都是单例的,也就是说spring容器中,默认只会创建一个类的实例,不管这个bean在哪里调用,事实上都是同一个实例。但是这样的设置对于某些需要重用的对象是不合理的,所以spring也给出了重用这些bean的机会。spring就此定义了多种作用域:1.单例(Singleton):在整个应用中,只创建bean的一个实例2.原型(Prototype):每次注入或者通过spring应用上下文获取的时候,都会创建一个新的bean的实例3.

2020-06-03 16:22:15 192

原创 Spring高级装配(一)

Spring高级装配Spring Profile什么是Spring profile?是为了方便环境迁移时,简化修改配置的过程。也就是说我们有一个项目在开发环境时,可能用到的是windons系统,mysql数据库等。但是到生产环境,项目部署在Linux系统上,也有可能是使用Oracle数据库。这个时候你也许在发布到生产环境时,需要修改跟环境有关的诸多代码,这样不安全。Spring就提供了一个解决方案,使用profile bean ,等到运行时,Spring会识别到active的profile,自动帮你

2020-05-27 22:02:45 220

原创 SpringIoC配置详解

Spring装配BeanSpring可选的配置方案1.在XML中配置2.在java中进行显示配置3.隐式的bean发现机制和自动装配推荐第三种,使用自动装配。接下来我们都会先介绍注解配置,其次介绍XML配置。spring实现自动装配:1.组件扫描,2.自动装配组件扫描会自动发现应用上下文中所创建的bean,自动装配是在扫描后自动满足bean之间的依赖关系先认识...

2020-04-02 00:51:07 186

原创 Mybatis框架基础配置及使用详解

Mybatis框架基础一、配置mybatis使用环境1.创建maven工程2.添加jar包依赖<dependencies> <!--mysql8连接数据库--> <dependency> <groupId>mysql</groupId> &l...

2020-01-04 17:10:58 288

原创 Java多线程之线程的优先级和守护线程

线程的优先级在操作系统中,线程可以划分优先级,优先级高的线程得到CPU执行权的机会多,也就是说优先级高的线程可能会先执行。setPriority()方法可以设置线程的优先级,一般线程的优先级数值是1~10,如果超过这个范围会抛出异常IllegalArguementException。1.10.1 线程优先级的继承性什么是优先级的继承性?就是说如果优先级为5的线程A启动了线程B,那么...

2019-08-11 08:46:31 302

原创 Java多线程之yield()方法

yield()方法该方法作用是放弃当前的CPU资源,将它让给其他的任务去占用CPU的执行时间。但是放弃的时间不确定,也许刚刚放弃就又获得了CPU的执行权。package cn.zxyy.multiThread.Thread.yield;public class MyThread extends Thread { @Override public void run(...

2019-08-11 07:42:15 277

原创 Java多线程之暂停线程

暂停线程暂停线程意味着此线程还可以恢复运行。在Java多线程中,suspend()方法可以暂停线程,resume()方法可以恢复线程。这两个方法都是已经过时的方法。1.8.1suspend与resume方法的使用package cn.zxyy.multiThread.Thread.suspendThread;public class MyThread extends Thre...

2019-08-11 01:23:13 6329

原创 Java多线程之停止线程

停止线程这里我们将学习如何更好地停止一个线程。停止线程,就是在线程正在处理指定任务的过程中,人为的不让它在继续执行下去,放弃当前的操作。停止线程看起来很简单,但是要想达到预期效果,就必须做好防范措施。停止线程的3种方式:1.使用退出标志,是线程正常退出,也就是执行完run方法再停止。2.使用stop方法停止3.使用interrupt方法中断线程1.7.1 停止不了的线程...

2019-08-08 19:09:34 184

原创 Java多线程之sleep()方法和getId()方法

sleep()方法让当前正在执行的线程休眠(暂停执行)指定的毫秒数。public class MyThread1 extends Thread { @Override public void run() { try{ System.out.println("run threadName = " +this.currentThread...

2019-08-08 17:31:30 493

原创 Java多线程之currentThread()方法

currentThread()方法currentThread()方法返回正在被执行的线程的信息。public class Run1{ public static void main(String[] args){ System.out.println(Thread.currentThread().getName()); }}注意事项:main线...

2019-08-08 17:15:28 19067

原创 Java多线程之使用多线程

Java多线程基础1.1进程和线程的概念1.什么是进程?进程是收操作系统管理的基本单元。我们可以看到,一个exe程序就可以看做是一个进程。2.什么是线程?线程就是在进程中独立运行的子任务。例如我们使用QQ时,可以一边聊天,一边传输文件,一边添加好友等等。这些都可以看做是一个独立的线程。1.2使用多线程每一个进程都至少有一个线程在运行它。那么我们平常写的小程序...

2019-08-08 15:52:15 785

原创 Java基础语法总结

Java基础语法计算机基础1.什么是二进制?二进制数只包含0和1,每一个0或者1都是一个bit(位)。我们常用的十进制如何转换成二进制:2.什么是字节?我们知道计算机中的数据都是由1或者0组成,每个0或1都是一个bit,每8个bit就是一个字节(byte)。字节是数据存储的最小单位。1 TB = 1024 GB---->1 GB = 1024 MB ---->1 MB...

2019-07-02 09:11:24 664

原创 Spring基础篇

Spring基础spring容器是什么?用于管理对象的如何启动spring容器?1.导包2.添加配置文件 这个配置文件用于告诉spring容器创建哪些对象如何创建对象?(如何让容器帮我们创建对象?).方式一:使用无参构造器(重点)第一步:给类添加无参构造器.第二步:在配置文件中配置bean元素.第三步:调用容器的getBean方法来获得对象.方式二:使用静态工厂方法(使用较...

2019-03-19 18:28:27 172

原创 Intellij中NoClassDefFound解决办法

在Intellj中,Tomcat部署,并不像eclipse一样,项目部署到Tomcat下,而Intellij IDEA只是和Tomcat建立联系。而项目部署后是在项目路径下target目录中。在项目中导入包,并且还要在Tomcat的lib目录下添加,否则会报错。...

2019-01-10 15:58:58 8577

原创 CoreJava读书笔记--JavaSE8的流库(二)

JavaSE8的流库【8】收集结果当流处理完以后,我们如果想要获得处理结果,如果是查看流中的元素,有三种方式:①传统的迭代器查看,②使用forEach方法查看,③使用forEachOrdered方法查看package com.zxyy.stream.test;import java.io.IOException;import java.nio.charset.StandardC...

2018-10-26 23:14:33 190

原创 CoreJava读书笔记--JavaSE 8的流库(一)

JavaSE 8的流库什么是流?流是一种比集合更高级的概念,它是指定计算的数据视图。在我看来,我们处理集合中的数据时,往往需要进行迭代操作,先遍历,再对每个元素进行某项操作。但是流可以优化这个解决办法,只关心需要的是什么,而不关心它的实现过程。【1】从迭代到流操作我们先比较一下,迭代和流操作的具体实现。比如,要计算某本书中长单词(大于12个字母就算)的数量。String cont...

2018-10-25 23:31:32 173

原创 CoreJava读书笔记--集合(三)--映射

映射集是一个集合,它可以快速地查找现有的元素。但是,要查看一个元素,需要有要查找元素的精确副本。通常,我们知道某些键的信息,并想要查找与之对应的元素。映射(map)数据结构就是为此设计的。(一)基本映射操作Java类库为映射提供了两个通用的实现:HashMap和TreeMap。这两个类都实现了Map接口。HashMap:散列映射,对键进行散列TreeMap:树映射,用键的整体顺...

2018-10-10 15:24:51 134

原创 CoreJava读书笔记--集合(二)--具体的集合

具体的集合(一)链表什么是链表?链表就是一个可以在任何位置进行高效地插入和删除操作的有序序列。为什么要有链表?因为对于数组和ArrayList而言,要想从中间删除一个元素要付出的代价相当大,当某个元素被删除的时候,在这个元素之后位置的元素全部都要向前移动,而插入元素时也是这样。为了解决这个问题,就有了链表这样的数据结构。事实上,在Java中,所有的链表都是双向链接的,即每个...

2018-10-09 22:24:51 216

原创 CoreJava读书笔记--集合(一)--Java集合框架

Java集合框架(一)将集合的接口与实现分离事实上,Java的集合类库也是将接口与实现分离的。这句话的意思就是:集合会定义接口,然后再实现接口。我们举个例子,看看对列Queue是如何接口与实现分离的。队列接口指出可以在队列尾部添加元素,队列头部删除元素,并且可以查找队列元素的个数。那么,我们可以把队列接口用下面简单的形式表现出来:public interface Queue&lt...

2018-09-29 11:05:57 360

原创 CoreJava读书笔记--泛型程序设计(二)

泛型程序设计(二)泛型代码和虚拟机虚拟机没有泛型类型对象。这句话可以理解为虚拟机不认识泛型类,它仍然只认识普通类。(一)类型擦除什么是类型擦除?无论何时定义一个泛型类型,都自动提供了一个相应的原始类型。原始类型的名字就是删去类型参数后的泛型类型名。而编译器在编译过程中去掉类型变量,就叫擦除。什么是补偿?编译器在将泛型类编译成class文件的过程中,擦除了类型变量,但是并...

2018-09-28 17:45:14 110

原创 CoreJava读书笔记--泛型程序设计(一)

泛型程序设计(一)(一)为什么要使用泛型?我们首先来看段代码:package generic;import java.util.ArrayList;import java.util.Iterator;public class GenericDemo { public static void main(String[] args) { ArrayList a = new...

2018-09-26 23:31:35 140

原创 CoreJava读书笔记--反射

反射什么是反射?Java反射机制是在运行状态中,对任意一个类(class文件),都能够知道这个类的属性和方法,对于任意一个对象,都能够调用它的方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为Java反射机制。可以理解为对类的剖析。(一)反射的功能①在运行时分析类的能力②在运行时查看对象③实现通用的数组操作代码④利用method对象反射是一种功能强大...

2018-09-25 22:56:26 113

原创 CoreJava读书笔记--异常、断言和日志(二)--断言和日志

使用断言在一个具有自我保护能力的程序中,断言很常用。(一)断言的概念断言机制允许在测试期间向代码中插入一些检查语句。当代码发布时,这些插入的检测语句将会被自动地移走。Java语言引入了关键字assert。assert有两种形式:assert 条件;和assert 条件 : 表达式;这两种形式都会对条件进行检测,如果结果为false,则抛出一个AssertionErro...

2018-09-21 18:29:39 183

原创 CoreJava读书笔记--异常、断言和日志(一)--异常

异常在理想状态下,我们认为用户的输入永远是正确的,选择打开的文件也是一定存在的,并且永远不会出现BUG,但这仅仅是理想状态。但现实状况却充满了不良的数据和带有问题的代码。为了避免这类事情的发生,至少应该做到以下几点:①向用户通告错误②保存所有的工作结果③允许用户以妥善的形式退出程序(一)异常分类在Java中,异常对象都是派生于Throwable类的一个实例,如果Java中内...

2018-09-20 23:00:10 152

原创 CoreJava读书笔记--接口、lambda表达式、内部类(四)--内部类

内部类什么是内部类?其实就是定义在一个类中的另一个类。为什么要使用内部类?①内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据②内部类可以对同一个包中的其他类隐藏起来③当要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷下面看一个简单的内部类示例:public class InnerClassDemo { public static vo...

2018-09-17 00:12:36 186 1

原创 CoreJava读书笔记--接口、lambda表达式、内部类(三)--lambda表达式

lambda表达式(一)为什么要引入lambda表达式?lambda表达式是一个匿名函数,可以把lambda表达式理解成一段可以像数据一样传递的代码块。目的是更简洁,更灵活。lambda表达式可以用更简洁的方式来创建只有一个抽象方法的接口(函数式接口)的实例。我们可以先来看看下面的代码:Comparator<String> comp = new Comparato...

2018-09-12 21:44:48 187

原创 CoreJava读书笔记--接口、lambda表达式与内部类(二)--接口示例

接口示例(一)接口与回调回调(callback)是一种常见的程序设计模式。在这种模式中,可以指出某个特定事件发生时应该采取的动作。假设我们需要做一个定时器,每隔10秒可以发出一个公告,该如何做呢?package timer;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.e...

2018-09-12 15:55:47 126

原创 CoreJava读书笔记--接口、lambda表达式与内部类(一)--接口

接口(一)接口概念在Java中,接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的格式进行定义。如果类遵从某个特定的接口,那么就履行这项服务。例如:Arrays类中的sort方法承诺可以对对象数组进行排序,但是要满足一个前提:对象所属的类必须实现了Comparable接口。下面是Comparable接口的代码:public interface Comparable{ ...

2018-09-11 19:01:08 133

原创 CoreJava读书笔记--继承(四)--枚举类与继承的设计技巧

枚举类前面我们已经遇到过,如何定义一个枚举类:public enum Size {SMALL,MEDIUM,LARGE,EXTRA_LARGE};这就定义了一个枚举类,它刚好有四个实例。在此尽量不要构造新的对象,也不要用equals方法来比较两个枚举类的值,直接使用“==”就可以了。如果需要的话,可以在枚举类型中添加一些构造器,方法和域。所有的枚举类都是Enum的子类,它们继承了...

2018-09-11 16:27:24 621

ojdbc6-11.1.0.7.0.jar

ojdbc6.jar 添加到maven仓库

2017-02-16

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

TA关注的人

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