
Java
文章平均质量分 71
云飞Ran
用代码构建出一个美丽的城堡。
展开
-
多线程总结
1.多线程线程状态分为:新建状态、就绪状态、运行状态、阻塞状态、死亡状态 - 对象等待池的阻塞状态:运行状态执行了wait方法 - 对向锁池的阻塞状态:试图获得某个同步锁,已经被其他线程占用,就会放到对象的锁池中 - 其他阻塞状态:执行了sleep()方法、join方法() - 线程睡眠Thread.sleep()方法:当前线程放弃cpu,转到阻塞状态 - 线程让步Thead.yie...原创 2018-03-29 19:54:51 · 285 阅读 · 0 评论 -
最全的Java版本历史
JDK 1.0(1996)Sun公司发布Java1.0,发布初期叫Oak,后改名为Java(JDK1.0基本上只支持Java语言基础特性)JDK 1.1(1997)引入内部类引入JDBC: 是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。JDBC是面向关系型数据库的。引入RMI...原创 2019-09-22 16:17:17 · 5461 阅读 · 1 评论 -
并发集合
List Set Map,在遍历的过程中,不允许更新操作(增删改),由于快速失败fail-fast机制,会抛出Concurrent Modification Exceptionpublic class User { private int id; private String name; public User(int id,String name){ ...原创 2019-09-18 22:19:37 · 326 阅读 · 0 评论 -
并发工具CountDownLatch&CyclieBarrier&Semaphore
CountDownLatchCountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器功能eg:如有一个任务A,要等待其他n个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现,每当线程完成任务后,计数器值就会减1.当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。使用方法初始化...原创 2019-09-17 20:16:48 · 774 阅读 · 0 评论 -
并发深度解析CAS&AQS
CAS(1) 概念:CompareAndSet 一种无锁的原子算法,使用乐观锁, 如:版本控制,CAS可以保证一次的读-改-写操作是原子操作,在单处理器上该操作容易实现,但是在多处理器上实现就有点儿复杂了。悲观锁:写(增删改)的操作多,读(查)的少 Lock乐观锁:读的多,写的少(2) 思想:给你一个期望值,与你现在的值比较,如果相等立即修改,反之不能修改什么也不做CAS(V,E,N)...原创 2019-09-15 16:23:57 · 438 阅读 · 0 评论 -
Java并发之深度解析volatile
1.首先复习一下CPU和JMM的关系:CPU缓存模型硬件:CPU 中有 寄存器Cache:包含L1i和L1d,L2,L3缓存内存eg:CPU想要计算i++的步骤如下:Cache缓存会将 i 拷贝一个副本到缓存当中,然后寄存器对i进行读取然后 i++操作返回给 Cache 最后把 Cache的数据更新到内存当中如果此时有两个线程,一个只做i++写入内存,一个从内存读取,那么他们就...原创 2019-09-08 18:29:23 · 473 阅读 · 0 评论 -
Java并发深度解析synchronized关键字
问题:在并发请求的情况下对一个属性进行操作会导致数据不一致性解决方案:利用锁的机制来实现同步锁机制互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问。互斥性我们也往往称为操作的原子性。可见性:必须确保在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程是可见的(即在获得锁...原创 2019-09-01 20:38:55 · 341 阅读 · 0 评论 -
Java内存模型
1.基本概念:程序:代码,完成某一个件任务,代码序列(静态的概念)进程:程序在某些数据上的一次运行(动态的概念)线程:一个进程可能包含一个或多个线程(占用资源的独立单元) 线程介绍如何开多进程 ?如何开多线程?2.JVM与线程:JVM什么时候启动?类被调用 JVM线程–>其他的线程(main)线程在JVM中3.JVM内存模型方法区:类信息、常量、静态变量、运行时...原创 2019-08-31 23:17:41 · 617 阅读 · 0 评论 -
Java解决线程死锁三种方案
什么是死锁?死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一直处于等待之中,没有任何个体可以继续前进。死锁不仅仅在线程之间会发生,存在资源独占的进程之间同样也可能出现死锁。通常来说,我们大多是聚焦在多线程场景中的死锁,指两个或多个线程之间,由于互相持有对方需要的锁,而永久处于阻塞状态。下面代码展示一下死锁package com.zhr.Thread;/** * @ Auth...原创 2018-11-30 16:41:13 · 14684 阅读 · 0 评论 -
过滤器Filter
1.filter的简介 filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理2.快速入门 步骤: 1)编写一个过滤器类实现Filter接口 2)实现接口中尚未实现的方法(着重实现doFilter方法) 3)在web.xml中配置(主要是配置要对那些资源进行过滤)3.filter的执行顺序 看的是filter...原创 2017-11-29 17:05:00 · 132 阅读 · 0 评论 -
浅谈Java——泛型DAO
首先解释一下为什么要学习泛型DAO。平时在写DAO的时候是一个接口对应一个实现类,实现类里面要写很多的操作数据库的方法。当我们有很多的javaben的时候我们会写很多的接口和实现类,并且里面的代码都是相同的,这样太麻烦,我们就不能写一个类,在类里面传入泛型,让类根据泛型,创建出一个实例对象,这样就出现了泛型DAO。一、需要提前准备的知识如下反射关键的类:Class<T>类 ...原创 2017-11-09 20:58:00 · 392 阅读 · 1 评论 -
详解String类中的intern()方法
我们用一个经典的例子来理解package com.jvm.heap;public class MyTest { public static void main(String[] args) { String str1 = new StringBuilder("计算机").append("软件").toString(); System.out.pri...原创 2018-01-25 16:48:00 · 238 阅读 · 0 评论 -
JVM介绍&自动内存管理机制
1.介绍JVM(Java Virtual Machine,Java虚拟机) JVM是Java Virtual Machine的缩写,通常成为java虚拟机,作为Java可以进行一次编写,到处执行(Write once, run anywhere)的平台基础,由下图我们可以清晰理出他们的之间的关系,我们可以把 Java程序设计语言、Java虚拟机、Java API类库这三部分统称为...原创 2018-03-11 19:42:00 · 171 阅读 · 0 评论 -
JVM垃圾收集器&对象的引用回收
1.介绍垃圾收集器垃圾收集器(Garbage Collection,GC)就是用于回收方法区和堆区,其他程序计数器、虚拟机栈、本地方法栈这3个区域都是随线程而生,随线程而灭,栈中的栈帧会随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存在类结构确定下来时就是已知的,因此这几个区域的内存分配和回收都是具备确定性,所以这3个区域不需要考虑回收,因为方法结束或线程结束时,内...原创 2018-11-21 22:32:41 · 206 阅读 · 0 评论 -
java垃圾收集算法
垃圾收集算法标记 - 清除算法:算法分为两个阶段“标记”和“清除”,首先标记出所有需要回收的对象,在标记完成后统一回收所被标记的对象,它的标记过程在上一篇博客中写过了,它是最基础的收集算法,后续算法都是基于这种思想对不足进行改进而得到的。主要不足有两个。效率问题:标记和清除两个过程的效率都不高空间问题:标记清除之后会产生大量不连续的内存碎片,空间碎片太多会导致以后在程序运行过程中需要分...原创 2018-11-20 23:14:13 · 132 阅读 · 0 评论 -
Java编程模型
面向对象编程(OOP)首先Java面向对象编程有三大特性为封装性、继承、多态封装:决定数据访问的限制继承:决定上下游的关系多态:一种接口多种实现面向切面编程(AOP)面向切面编程分为三种种,一种静态、一种动态、字节码提升静态接口:使用java.util.logging.Filter、java.util.EventListener,当我执行代码的时候会进行拦截通过规定拦截方法、注...原创 2019-09-22 21:03:29 · 592 阅读 · 0 评论