Java基础
zhangpower1993
技术小白,慢慢学习中
展开
-
ArrayList扩容机制
https://blog.csdn.net/u010890358/article/details/80515284 ArrayList实现了List接口,它是一个可调整大小的 Object[] 数组可以用来存放各种形式的数据。并提供了包括CRUD在内的多种方法可以对数据进行操作但是它不是线程安全的,外ArrayList按照插入的顺序来存放数据。ArrayList的主要成员变量:...转载 2019-05-07 21:26:57 · 628 阅读 · 0 评论 -
Synchronized实现原理
1. 应用方式:2. synchronized代码块底层原理3.synchronized方法底层原理1. 应用方式:主要有以下3种应用方式:修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁...转载 2019-05-08 16:43:08 · 326 阅读 · 0 评论 -
并发关键字volatile(重排序和内存屏障)
参看:并发关键字volatile、 JAVA 基础系列之 重排序和Volatile指令重排是指处理器为了提高程序运行效率,可能会对输入代码进行优化,它不保证各个语句的执行顺序同代码中的顺序一致,但是它会保证程序最终执行结果和代码顺序执行的结果是一致的。指令重排序不会影响单个线程的执行,但是会影响到线程并发执行的正确性。程序执行到volatile修饰变量的读操作或者写操作时,在其前面的操作肯...转载 2019-05-08 14:18:01 · 1362 阅读 · 0 评论 -
java.util.concurrent包
请见:https://juejin.im/entry/5b39bc776fb9a00e5c5f9407、https://juejin.im/post/5a093ff551882531bb6c4ee3#heading-12java.util.concurrent Java 并发工具包是 Java5 添加的一个并发工具包。这个包包含了一系列能够让 Java 的并发编程变得更加简单轻松的类。...原创 2019-04-23 15:42:28 · 210 阅读 · 0 评论 -
多线程同步
目录1. 为什么引入同步机制2.竞态条件和内存可见性2.1 竞态条件2.2 内存可见性3. 线程同步方法3.1synchronzied3.2JDK1.5的锁 Lock3.3volatile关键字1. 为什么引入同步机制多线程为什么要采用同步机制,因为不同的线程有自己的栈,栈中可能引用了多个对象,而多个线程可能引用到了堆中的同一个或多个对象,而线程的栈...转载 2019-04-26 10:29:37 · 198 阅读 · 0 评论 -
线程间通信
1. 管道输入/输出流2. Thread.join()的使用3. 等待/唤醒机制3.1synchronied关键字等待/通知机制3.2ReentrantLock类加锁的线程的Condition类的await()/signal()/signalAll()3.3Lock的condition的await/singal 和 Object的wait/notify ...原创 2019-04-26 09:51:36 · 126 阅读 · 0 评论 -
死锁---转账问题
1. 转账死锁场景场景:简单的银行转账,将资金从一个账户(fromAccount)转到另一个账户(toAccount),当并发执行的时候,可能会出现死锁的情况;死锁的场景:多线程执行,线程1:账户A转账给账户B;线程2:账户B转账给账户A;线程1和线程2同时转账时,就可能会发生 死锁: 线程1:new TransferAccount(fromAccount,toAccou...原创 2019-04-25 21:42:46 · 3564 阅读 · 0 评论 -
死锁的四个必要条件、预防和避免办法
死锁1. 四个必要条件2. 死锁预防3. 死锁的避免死锁概念:多个并发进程因争夺系统资源而产生相互等待的现象。1. 四个必要条件互斥:某种资源一次只允许一个进程访问,即该资源一旦分配给某个进程,其他进程就不能再访问,直到该进程访问结束。 占有且等待:一个进程本身占有资源(一种或多种),同时还有资源未得到满足,正在等待其他进程释放该资源。 不可抢占:别人已经占有了某项...原创 2019-04-25 21:17:02 · 14395 阅读 · 0 评论 -
JUC 中的 Atomic 原子类总结
转载:JUC 中的 Atomic 原子类总结1. Atomic 原子类介绍Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。所以,所谓原子类说简单点就是具有原子/原子操作特征的类。根据操作的数据类型,可以将JUC包中的原子类分为4类1.1 基本类型使用原子的方式更新基本类型AtomicInt...转载 2019-04-16 14:54:44 · 480 阅读 · 0 评论 -
悲观锁与乐观锁
转载:面试必备之乐观锁与悲观锁.md目录悲观锁-多写场景乐观锁-多读场景两种锁的使用场景乐观锁常见的两种实现方式1. 版本号机制2. CAS算法乐观锁的缺点1. ABA 问题2. 循环时间长开销大3. 只能保证一个共享变量的原子操作CAS与synchronized的使用情景悲观锁-多写场景总是假设最坏的情况,每次去拿数据的时候都认为别人会修改...转载 2019-04-16 14:29:33 · 146 阅读 · 0 评论 -
Java中创建对象的4种方式
转载:java创建对象的5中方式new关键字 反射 Class类的newInstance方法 Constructor类的newInstance方法 克隆 发序列化使用new关键字 }→调用了构造函数 使用Class类的newInstance方法 } →调用了构造函数 使用Constructor类的newInstance方法 }→调用了构造函...转载 2019-04-12 11:09:26 · 109 阅读 · 0 评论 -
线程安全的使用HashMap
目录1. java.util.Hashtable类:2. 使用 java.util.concurrent.ConcurrentHashMap 类:3. Collections.synchronizedMap()多线程环境下HashMap线程不安全的体现1. 添加元素(put)时,存在数据覆盖的问题2. resize的时候,会出现死循环(jdk1.7)HashMap 是非线程...原创 2019-04-11 21:59:15 · 617 阅读 · 0 评论 -
volatile和synchronized的区别
volatile和synchronized特点首先需要理解线程安全的两个方面:执行控制和内存可见。执行控制的目的是控制代码执行(顺序)及是否可以并发执行。内存可见控制的是线程执行结果在内存中对其它线程的可见性。根据Java内存模型的实现,线程在具体执行时,会先拷贝主存数据到线程本地(CPU缓存),操作完成后再把结果从线程本地刷到主存。synchronized关键字:解决的是执行控制...转载 2018-11-05 11:01:57 · 92 阅读 · 0 评论 -
集合进行排序的两种方式
目录方法1:实现comparable接口方法2:自定义排序(Comparator接口、compare方法)参考:https://www.cnblogs.com/huangjinyong/p/9037588.htmljava集合的工具类Collections中提供了两种排序的方法,分别是:Collections.sort(List list) Collections.sort...转载 2019-05-07 22:17:12 · 3993 阅读 · 0 评论