Java进阶
Java进阶
不变不中
多想、多做、多总结,别怕吃亏。
展开
-
023.常用设计模式
常用设计模式原创 2018-11-21 13:57:07 · 446 阅读 · 0 评论 -
022.自定义注解
注解是Jdk1.5新增新技术。很多框架为了简化代码,都会提供有些注解。可以理解为插件,是代码级别的插件,在类的方法上写:@XXX,就是在代码上插入了一个插件。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。定义Java文件中叫做Annotation,用@interface表示。元注解@interface上面按需要注解上一些东西,包括 @Retention、@Target、...原创 2018-11-21 13:12:36 · 206 阅读 · 0 评论 -
021.使用反射,编写SpringIOC
什么是SpringIOC就是把每一个bean(实体类)与bean(实体类)之间的关系交给第三方容器进行管理。而不是传统的在你的对象内部直接控制。SpringIOC实现原理读取bean的XML配置文件使用beanId查找bean配置,并获取配置文件中class地址使用java反射技术实例化对象获取属性配置,使用反射技术进行赋值详细步骤:1.利用传入的参数获取xml文件的流,...原创 2018-11-21 09:31:02 · 227 阅读 · 0 评论 -
020.Java的反射机制
定义JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。应用场景Jdbc 加载驱动-----Spring ioc框架获取类的三种方式package cn.qbz.thread;public class Test112003 ...原创 2018-11-20 16:39:56 · 167 阅读 · 0 评论 -
019.数据交换格式:Json、XML
简介数据交换格式中,最核心的就是Json和XML。其中,Json是一种轻量级数据交换格式,XML是一种重量级的数据交换格式。相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以客户端和服务器的数据交换格式往往通过JSON来进行交换。常用的json框架为:fastjson(阿里)、gson(谷歌)、jackson(SpringMVC自带)其中,服务...原创 2018-11-20 15:36:26 · 349 阅读 · 0 评论 -
018.多线程-悲观锁、乐观锁、重入锁、读写锁、自旋锁、CAS无锁机制
悲观锁(Pessimistic Lock)顾名思义,就是很悲观。每次去拿数据的时候都认为别人会修改,所以都会上锁。这样别人想拿这个数据就会阻塞(block)直到它拿到锁。传统的关系型数据库里面就用到了很多这种锁机制。比如:行锁,表锁,读锁,写锁等,都是在做操作之前先上锁。乐观锁(Optimistic Lock)顾名思义,就是很乐观。每次去拿数据的时候都认为别人不会修改,所以不会上锁。但是在...原创 2018-11-20 11:41:38 · 810 阅读 · 0 评论 -
017.多线程-线程池原理解析以及合理配置
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ...原创 2018-11-19 20:00:36 · 184 阅读 · 0 评论 -
016.多线程-线程池的四种创建方式
前言为什么要用线程池经常创建、销毁 线程,将是对系统资源的极大浪费。因此,实际开发中我们将使用线程池来管理、复用 线程。使用线程池,可以1.降低资源消耗: 重复利用线程,减少创建和销毁造成的消耗。2.提升响应速度: 任务到达,不需要创建,立即执行。3.提高可管理型: 线程是CPU调度和分派的基本单位,如果无限制地创建,不仅会消耗系统资源,还会降低系统稳定性。使用线程池可以统一进行...原创 2018-11-19 19:19:47 · 5668 阅读 · 1 评论 -
015.多线程-并发队列
在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。ConcurrentLinkedQueueConcurrentLinkedQueue : 是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLink...原创 2018-11-19 15:09:25 · 466 阅读 · 0 评论 -
014.多线程-并发包
ArrayListArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。但是,当进行增加存储功能,以及插入、删除元素时,需要对数组进行复制以及移动,代价比较高。它适合随机查找和遍历,不适合插入和删除。默认创建数组长度为10 private static final Object[] EMPTY_ELEMENTDATA = {}; p...原创 2018-11-19 11:43:12 · 296 阅读 · 0 评论 -
013.多线程-ThreadLocal
为每一个线程提供一个局部变量。code of demo:创建三个线程,分别打印递增的IDS错误demopackage cn.qbz.thread;/** * @Author: 花生米 * @Date: 2018/11/16 18:15 */public class ThreadLocalTest { public static void main(String[] ...原创 2018-11-16 18:36:09 · 174 阅读 · 0 评论 -
012.多线程-interrupt线程的中断
interrupt()中断线程,具体使用场景可以查看下面的源码以及注释 /** * 中断线程 * * 除非当前线程中断自身, * 否则在checkAccess中将会抛出SecurityException * * 如果当前线程在 wait、join、sleep 中被阻塞, * 将会清除它的中断状态(isInterrup...原创 2018-11-16 18:00:04 · 239 阅读 · 0 评论 -
011.多线程-lock锁
package cn.qbz.thread;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @Author: 花生米 * @Date: 2018/11/15 ...原创 2018-11-16 10:24:00 · 277 阅读 · 0 评论 -
010.多线程-线程间通信
多线程之间的通信,其实就是多个线程同时操作(读+写)同一个资源。安全问题:当线程在读取资源的过程中,写线程操作了资源,导致读线程读取的数据,一部分是写之前的数据,一部分是写之后的数据。解决安全问题:读线程和写线程使用同一把对象锁就好了。code of demo:package cn.qbz.thread;/** * 线程间通信 */public class Conne...原创 2018-11-15 21:15:49 · 184 阅读 · 0 评论 -
009.多线程-AtomicInteger
package cn.qbz.thread;import java.util.concurrent.atomic.AtomicInteger;public class AtomicTest { public static void main(String[] args) { AtomicInteger count = new AtomicInteger(0); ...原创 2018-11-15 18:54:43 · 215 阅读 · 0 评论 -
008.多线程-synchronized锁
为了解决线程安全问题,我们的做法是:不要让多个线程同时对一个全局变量作写的操作。常用的做法就是加锁,来实现线程的同步。自动锁synchronized和手动锁lock。由于synchronized不需要手动释放锁,抛出异常也可自动释放锁,故而常用synchronized自动锁。一个线程拿到锁后,其他线程则只能排队,等待锁的释放。代码执行完毕或者程序抛出异常,锁均会被释放。同步函数:...原创 2018-11-15 15:16:19 · 290 阅读 · 0 评论 -
007.多线程-Java内存模型
Java内存模型 ( Java Memory Model , JMM )JMM主要是规定了线程与内存之间的一些关系。Java内存模型中规定,所有的变量都存储在主内存中,对所有线程都是共享的。而每个线程都有自己的工作内存。工作内存中保存的是对主内存中某些变量的拷贝。不同线程无法访问对方的工作内存,线程间通信必须通过主内存来完成。线程对所有变量的操作(读取、赋值等)必须在工作内存中进行...原创 2018-11-15 09:40:12 · 215 阅读 · 0 评论 -
006.多线程-join、yield
joinjoin()的作用是让当被调用的线程执行,当前线程阻塞。下面的代码表示的是:让线程1执行完毕后再执行线程2package cn.qbz.thread;public class ThreadJoinTest { public static void main(String[] args) { Thread thread1 = new Thread(ne...原创 2018-11-14 21:06:30 · 183 阅读 · 0 评论 -
005.多线程-线程的生命周期
package cn.qbz.thread;public class ThreadLifeTest { public static void main(String[] args) { Thread thread1 = new Thread(new Runnable() { public void run() { ...原创 2018-11-14 13:53:12 · 167 阅读 · 0 评论 -
004.多线程-线程的三种创建方式
1. extend Threadpackage cn.qbz.thread;public class ExtendThreadTest { public static void main(String[] args) { ExtendThread thread = new ExtendThread(); thread.start(); ...原创 2018-11-14 12:13:05 · 143 阅读 · 0 评论 -
003.多线程-主线程、守护线程、用户线程的区别
对于线程的分类,我们可以简单划分为:主线程 (每个进程只有一个主线程)子线程主线程: main方法子线程:非主线程皆是子线程子线程中可以简单划分为:守护线程非守护线程,即用户线程守护线程:主要是指 在进程中,为主线程提供一种通用服务的线程。比如 gc线程因为,主线程一旦结束或者销毁,守护线程没有了守护对象,也将同步进行结束或销毁。非守护线程/用户线程:...原创 2018-11-14 11:06:08 · 1892 阅读 · 5 评论 -
002.多线程-为什么要使用多线程
简单来说就是为了提高效率在单核CPU中,多线程主要是为了降低阻塞。多线程的并发,其实是一种“伪并行”。在每个时刻,真正执行的只有一个线程。但是,由于多线程减少了等待IO操作(比如:磁盘、网络、数据库等)时间,所以,多线程大大提高了程序的效率。还举车间与车间工人的例子,简单说明一下:车间要生产10个鸡蛋灌饼,如果让一个工人来做的话,花费的时间为:通知工人的时间[1毫秒]+工人生产...原创 2018-11-14 10:44:48 · 278 阅读 · 0 评论 -
001.多线程-进程与线程的区别
什么是进程?顾名思义,就是进行中的程序,也就是运行中的程序。我们打开电脑的任务管理器可以看到:此时,运行中的360浏览器,Google浏览器等都是独立的一个进程,他们拥有相应的系统资源,比如:CPU,内存,磁盘等。但是进程间的创建、切换、撤销以及多个进程的并行,均存在较大的时空开销,因此,需要引入一种轻量级的进程。这种轻型的进程也就是线程。线程不拥有系统资源,但是同一个进程下的所有线程可以共...原创 2018-11-12 19:02:02 · 124 阅读 · 0 评论