java开发
可乐猫哈
这个作者很懒,什么都没留下…
展开
-
java开发:静态代码块、构造代码块执行时期与顺序
今天突发奇想,静态代码块、构造代码块和构造函数执行时期和顺序是怎样的呢?于是我写了的demo测试了一下/** * @Author: david.lvfujiang * @Date: 2020/1/12 * @Describe: */public class User { static { Log.e("tag","静态代码块"); } {...原创 2020-01-12 18:23:25 · 424 阅读 · 0 评论 -
java开发:Java虚拟机笔记(2):垃圾标记算法
简介:我们知道堆内存中几乎存放着程序所有的对象实例,垃圾收集器在对堆回收之前,第一件事情就是要确定这些对象哪些还“存活”着,哪些对象已经“死去”(即不可能再被任何途径使用的对象)。1.引用计数算法这种算法的思想是给对象添加一个引用计数器:一个对象被引用一次时计算器加1,当引用被回收时失效时计数器减1,当引用计算器等于0时则判定该对象是死亡对象,即可以进行回收。但是引用计数算法很难解决j...原创 2020-01-12 16:48:50 · 112 阅读 · 0 评论 -
java开发:Java虚拟机笔记(1):内存区域
1.程序计数器(Program Counter Register)程序计数器是内存中较小的一块区域,属于线程私有的。可以把它看成当前线程执行的字节码行号指示器,通过它来确定执行的下一行代码,循环、跳转、线程恢复等等都需要依赖它来完成。我们知道java多线程是通过轮流切换CPU时间片来完成的,在线程切换过程中恢复线程到原来执行的位置则是靠程序计数器完成的。2.Java虚拟机栈(Java Vi...原创 2020-01-12 16:02:12 · 121 阅读 · 0 评论 -
java开发:java多线程(九):死锁
简介:死锁是指多线程在相互竞争资源时陷入僵局,导致线程无法往下执行。例如线程1持有A资源,运行过程中去请求B资源,同时线程2持有B资源,此时也正在请求A资源,俩个线程互相持有对方需要的资源,并且自身又不肯释放自己占有的资源,从而导致死锁。生产死锁的四个条件:1.互斥条件资源在某一段时间内只能被一个线程占用2.不可剥夺条件一旦资源被线程占用后,其他线程将获取不到,除非占用的线程...原创 2019-12-30 14:43:09 · 141 阅读 · 0 评论 -
java开发:java多线程:CyclicBarrier和CountDownLatch使用详解
CountDownLatch:CountDownLatch是一个非常实用的多线程控制工具类,称之为“倒计时器”,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。public class Main6Activity extends AppCompatActivity { @Override protected void onCreate(Bundle sa...原创 2019-12-30 11:44:05 · 197 阅读 · 0 评论 -
java开发:JAVA多线程(八):读写锁ReadWriteLock
java开发中实现线程同步我们一般使用synchronize来修饰方法或者代码块,synchronize是一种互斥锁,只有一个线程能拿到锁。在实际开发中我们会有这么一种情况:多个线程同时读写,读线程的数量远远大于写线程。而我们知道读并不会导致数据出问题,只有写的时候才会需要同步。如果说我们使用synchronize来修饰则效率会很低,即使俩个线程同时读取数据必须要有一个线程进行等待。若我们只对写...原创 2019-12-28 17:03:35 · 258 阅读 · 0 评论 -
java开发:java多线程:原子类AtomicInteger和AtomicStampedReference使用详解
在上一节java开发:乐观锁CAS机制中我们说过CAS机制的原理,与及使用CAS会发生的ABA问题解决办法。java中提供一些列的基本数据类型原子操作类用来实现操作基本数据类型时保证线程安全,其底层就是使用CAS机制实现的。AtomicInteger则是用来操作int类型的数据,保证线程安全。什么是ABA问题呢?举个例子:比如说我的卡里有100大洋,此时有俩个线程同时去操作这100大洋,它...原创 2019-12-27 21:51:45 · 760 阅读 · 3 评论 -
java开发:集合(六):Collections.synchronizedMap()
我们知道hashMap是非线程安全的,为了实现线程安全,无非就是以下三种方式:Hashtable 、ConcurrentHashMap 、SynchronizedMap这篇文章主要讲解SynchronizedMap是怎么实现线程安全的SynchronizedMap用法: HashMap hashMap = new HashMap<String, String>(); ...原创 2019-12-27 14:51:43 · 1404 阅读 · 0 评论 -
java开发:java集合(七):迭代器的fail-fast(快速失败)机制
Inteator 是顶层的迭代器接口,定义了迭代器共同的方法。hasNext()判断集合是否含有下一个元素,next()获取下一个元素。每个具体的集合类中都有一个迭代器内部类实现于Inteator接口,用来历遍集合。为了方便获取迭代器对象,java还提供了Iterable接口,使用iterator()方法来获取集合的迭代器。Collection 继承于Iterable接口,而所有具体的集合...原创 2019-12-27 14:17:05 · 332 阅读 · 0 评论 -
java开发:乐观锁CAS机制
先来说说什么是悲观锁、乐观锁:悲观锁:总是假设最坏的情况,每次操作数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞,直到它拿到锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。乐观锁:总是假设最好的情况,每次操作数据的时候都认为别人不会修改。所以不会上锁,其他线程依然是可以访问,但是在更新的时候会判断一...原创 2019-12-24 20:15:24 · 579 阅读 · 1 评论 -
java开发:父类的静态方法能否被子类重写
父类的静态方法能否被子类重写?答:不能java中实例方法的重写其实是一种运行时多态:public class Person { public String getInfo() {}}public class Student extends Person { public String getInfo() {} }main(){Person person = n...原创 2019-12-23 21:54:55 · 592 阅读 · 1 评论 -
java开发:java的8中基本数据类型各占多少字节
java一共有8中基本数据类型:1.byte:占1个字节2.short:占2个字节3.int:占4个字节4.long:占8个字节5.float:占4个字节6.double :占8个字节7.char:占2个字节8.boolean:占4个字节一个字节占8位。至于为什么java的boolean类型占4个字节可以参考这篇博客[Java基础]Java中boolean类型到底占用多少个字节?...原创 2019-12-23 21:04:29 · 1146 阅读 · 0 评论 -
java开发:谈谈java多态的理解
简介:java多态:意思是一种行为具有多个不同表现形式或形态的能力。多态分为俩种:编译时期多态和运行时期多态。例如:方法重载:是属于编译时期多态,方法名可以相同,但是在编译时期可以根据参数类型、参数个数确定具体的方法。从而实现调用同名方法可以产生不同的结果。方法重写:属于运行时期多态,发生在继承关系中,子类重写父类方法,我们可以根据子类对象、super关键词来决定调用子类还是父类的方法。...原创 2019-12-23 20:50:57 · 276 阅读 · 0 评论 -
java开发:枚举的使用
前言:枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中。此外,枚举类型还提供了安全检查功能。枚举类型本质上还是以类的形式存在。举个例子:假如说我们有个方法要判断参数来知道今天是星期几初级程序员写法:public void getMessage(int id) { switch (id) { case 1: ...原创 2019-12-18 10:00:25 · 277 阅读 · 0 评论 -
java开发:集合(六):HashTable源码分析
上次对hashMap进行了源码分析我们知道hashMap是非线程安全的,其次hashMap允许key值为null,且只有一个。这次我们对HashTable进行分析,看看hashMap和HashTable的区别在哪。1.HashTable是线程安全的synchronized void clear()synchronized Object ...原创 2019-12-05 10:53:14 · 102 阅读 · 0 评论 -
java开发:JDK1.8新特性:base64加密
在Java 8中,Base64编码已经成为Java类库的标准。使用方法如下: String text = "base64 in java8 lib"; String base64 = null; try { base64 = Base64.getEncoder().encodeToString(text.getBytes("UTF-8...原创 2019-12-17 09:29:23 · 353 阅读 · 0 评论 -
博客导航
目录:java开发:java开发:泛型的理解java开发:反射的理解Java开发:java多线程(一):synchronized 对象锁和类锁的区别java开发:java多线程(二): wait()、sleep()、 join()和yield()区别java开发:java多线程(三):lock方式实现线程同步机制java开发:java多线程(四):线程池java开发:...原创 2019-12-13 17:47:11 · 826 阅读 · 0 评论 -
java开发:java多线程(五):CompletableFuture实现异步非阻塞获取数据
java创建线程总共有三种方式:1.继承Thread类2.实现runnable接口3.实现Callable接口他们三者的区别是Callable可以返回结果值,而前俩者无法返回结果值。假若我们的主线程需要子线程去执行异步操作获取数据作为某个函数的输入,我们可以使用Callable方式创建线程。Callable方式创建线程://实现Callable接口public class MyC...原创 2019-12-11 15:06:47 · 3028 阅读 · 0 评论 -
java开发:单例模式(二):双重验校
//final类不可继承final public class Single { //使用volatile修饰变量 private static Single single = null; public static Single create() { //第一次验校 if (single == null) { //...原创 2019-12-09 17:33:05 · 163 阅读 · 0 评论 -
java开发:单例模式(一):静态内部类
//final不允许类被继承public final class Singleton { //私有构造函数,不允许外部new private Singleton(){ } public static Singleton getInstance(){ return Holder.instance; } //在静态内部类中持有...原创 2019-12-09 17:30:46 · 329 阅读 · 0 评论 -
java开发:StringBuilder 、StringBuffer源码解析
引言:String、StringBuilder 、StringBuffer在面试中被问到的几率是非常多的。我们常常这样回答:1.String是不可变的对象2.StringBuffer是线程安全的,StringBuilder 不是线程安全的3.StringBuilder 效率高于StringBuffer如果面试官继续问StringBuffer、StringBuilder 它们底层是怎么...原创 2019-12-09 10:38:15 · 158 阅读 · 0 评论 -
java开发:如何正确中断一个线程
我们使用线程时java会提供stop()方法给我们终止一个线程,但是目前stop()已经过时(不信你自己调用试试看,系统会提示你该方法已经过时),因为stop()是属于恶意的中断可能会造成很多不好的结果。因此不建议使用。我们先弄清楚interrupt()、interrupted()、isInterrupted(),这三种的联系与区别:1.interrupt()是给线程设置一个中断标志位,如...原创 2019-12-06 17:07:17 · 553 阅读 · 0 评论 -
java开发:集合(五):Vector源码解析
Vector 简介:Vector 和ArrayList一样都是实现了List接口。底层实现也是基于一个动态数组,每当我们添加元素时都会判断数组容量是否足够,如果不足则对数组进行扩容。这个数组默认长度为10,当然我们也可以设定数组的长度。每次扩容是默认是基于原有长度的2倍,扩容的增长系数也可以指定。Vector 是线程安全的。java开发:集合(二):ArrayList源码解析Vector...原创 2019-12-03 16:48:18 · 110 阅读 · 0 评论 -
java开发:集合(四):hashMap源码解析
HashMap底层存储结构HashMap是一个用于存储Key-Value键值对的集合,每一个键值对其实就是HashMap内部的Entry类对象。 static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V&...原创 2019-12-03 15:10:49 · 149 阅读 · 0 评论 -
java开发:集合(三):LinkedList源码解析
LinkedList简介:LinkedList底层是基于双向链表实现的,它是线程安全的,相对于ArrayList查找速度较慢,插入删除速度较快。源码分析:LinkedList有个内部类:Node private static class Node<E> { E item; Node<E> next; Node&l...原创 2019-12-03 11:59:01 · 133 阅读 · 0 评论 -
java开发:集合(二):ArrayList源码解析
ArrayList简介:ArrayList底层实现其实是基于一个动态数组,每当我们添加元素时都会判断数组容量是否足够,如果不足则对数组进行扩容。这个数组默认长度为10,当然我们也可以设定数组的长度。每次扩容是基于原有长度的1.5倍。并且ArrayList是非线程安全的。看下ArrayList的构造函数源码,ArrayList一共有三个构造函数: //elementData就是存放元素的数...原创 2019-12-03 10:57:00 · 126 阅读 · 0 评论 -
java开发:集合(一):数组扩容和元素删除
1.Arrays.copyOf()我们知道java中创建数组的时候需要指定数组的长度,而且数组长度默认是不会改变int[] arry = {1,2,3,4,5};int[] arry1 = new int[5];那我们有需求,需要当我们数组容量不够的时候可以进行扩容,Arrays.copyOf()方法可以对数组进行扩容,第一个参数是数据源,第二个参数是数组扩大的容量 int[] ...原创 2019-12-02 17:15:14 · 306 阅读 · 0 评论 -
java开发:java多线程(四):线程池
java多线程系列文章:java多线程(一):synchronized 对象锁和类锁的区别java多线程(二): wait()、sleep()、 join()和yield()区别java多线程(三):lock方式实现线程同步机制1.为什么要使用线程池按我的理解是为了更好的管理线程,减少系统资源的消耗,因为每次创建和销毁一个线程都是要消耗系统资源的,而线程池可以对已有的线程进行复用,...原创 2019-12-02 11:44:56 · 148 阅读 · 0 评论 -
java开发:java多线程(三):lock方式实现线程同步机制
java多线程系列文章:jaiva多线程(一):synchronized 对象锁和类锁的区别java多线程(二): wait()、sleep()、 join()和yield()区别这章博客讲解lock如何实现同步机制,比较和synchronized 的区别:JDK1.5中新增加了ReentrantLock类也能达到synchronized 同样的效果,并且在扩展功能上也更加强大,...原创 2019-12-01 22:04:35 · 465 阅读 · 0 评论 -
java开发:java多线程(二): wait()、sleep()、 join()和yield()区别
一、wait()1.wait()必须在synchronized 修饰的同步代码块中调用2.wait()会释放cpu资源和释放同步锁(类锁和对象锁)3.调用wait()后必须调用notify()或notifyAll()后线程才能进入就绪状态重新获取cpu资源二、sleep()sleep()会释放cpu资源,但是不会释放同步锁(类锁和对象锁)验证一下sleep()会不会释放同步锁...原创 2019-12-01 15:52:22 · 374 阅读 · 0 评论 -
Java开发:java多线程(一):synchronized 对象锁和类锁的区别
为什么使用synchronized在多线程中如果多个线程同时访问某一资源,会造成不可预计的结果。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块。synchronized 什么时候是对象锁:当synchronized 作用在非静态的方法时是对象锁 synchronized public void getName() { }对象锁的特征:...原创 2019-11-29 17:51:04 · 506 阅读 · 0 评论 -
java开发:反射的理解
什么是反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。什么是类的类对象:在面向对象的世界里,万物皆对象。类也是对象,它是java.lang.Class类的实例对象。我们可以通过反射拿到所有类的类对象。通过这个类的类对象我们可以获取...原创 2019-11-29 17:10:14 · 403 阅读 · 0 评论 -
java开发:泛型的理解
泛型是java在编译时期提供的一种数据类型安全监测机制例如我们创建一个List集合 ArrayList list = new ArrayList();,如果集合当中有String类型的数据、有Integer类型的数据,如果我们历遍list集合对每一个元素都统一进行操作,运行时有可能就会出现异常,因为可能String有的方法Integer不一定有,因此会报错。而如果我们使用泛型创建集合: ...原创 2019-11-29 14:54:56 · 122 阅读 · 0 评论