java基础
jwnba24
这个作者很懒,什么都没留下…
展开
-
java中fail-fast机制详解
java中fail-fast机制详解最近遇到一个HashMap相关的问题:如果HashMap在扩容的时候插入一组元素,这组元素能够插入成功吗?于是想到了fail-fast机制,以下是对于fail-fast的一些分析。以ArrayList的源码为例:public static void main(String[] args) { List<String&g...原创 2018-03-16 20:11:03 · 337 阅读 · 0 评论 -
java多线程学习(5)——Lock锁初探
首先,比较下java两种线程锁:synchronized锁与Lock锁: 1.synchronized 优点:实现简单,语义清晰,便于JVM堆栈跟踪,加锁解锁过程由JVM自动控制,提供了多种优化方案,使用更广泛 缺点:悲观的排他锁,不能进行高级功能 2.lock 优点:可定时的、可轮询的与可中断的锁获取操作,提供了读写锁、公平锁和非公平锁,可实现更细粒度的锁,可以知道当前线程锁定状态 ...原创 2018-06-23 19:59:23 · 246 阅读 · 0 评论 -
jdk动态代理与cglib动态代理
java中的动态代理主要分为两种方式:1.jdk动态代理;2.cglib动态代理 1. jdk动态代理//首先创建一个接口public interface Hello { String sayhello(String str);}//该类实现Hello接口作为被代理的类public class HelloImpl implements Hello{ public St...原创 2018-06-13 19:59:50 · 331 阅读 · 0 评论 -
java单例模式正确创建方式
现在在网络上搜索“java单例模式”关键词,很容易能够得到所谓的“懒汉式”,“饿汉式”两种模式。//饿汉式public class SingletonDemo { private static SingletonDemo instance=new SingletonDemo(); private SingletonDemo(){ } public sta...原创 2018-06-02 22:04:13 · 642 阅读 · 0 评论 -
深入理解java并发——CountDownLatch
CountDownLatch有什么作用? 简单来说通过一个计数器控制线程的执行和阻塞,和CyclicBarrier其实很相似,在一组线程执行完成之前,另一个或者多个线程阻塞,等到这一组线程执行完之后再执行。 CountDownlatch与CyclicBarrier区别: 1.CountDownLatch的作用是允许1或N个线程等待其他线程完成执行;而CyclicBarrier则是允许N个线程...原创 2018-04-02 12:22:19 · 193 阅读 · 0 评论 -
深入理解java并发——CyclicBarrier
CyclicBarrier有什么作用? 假如我们有一个20个人的会议,需要等所有人到齐之后,领导才能致开场词,这个场景抽象出来就可以使用CyclicBarrier。20个人相当于20个子线程,领导致辞相当于另一个主线程,每当一个子线程启动,计数加1,最后计数到20时表示人全部到齐,可以执行主线程,领导开始致辞!@#¥%……&……………. 好了 ,领导致辞完毕,20个人一起开始噼里啪啦鼓掌...原创 2018-04-01 23:18:24 · 152 阅读 · 0 评论 -
深入理解java阻塞队列——ArrayBlockQueue
深入理解ArrayBlockQueueArrayBlockQueue是一个有界的阻塞队列,其内部是通过一个数组来维护的,该队列采用FIFO的原则对元素进行排序添加的。 通过分析其构造方法,在创建该实例的时候需要指定数组的容量。public ArrayBlockingQueue(int capacity, boolean fair, ...原创 2018-03-20 10:55:33 · 6726 阅读 · 0 评论 -
java多线程学习——(1)认识Thread和Runnable
1.Runnable:Runnable是一个接口,该接口中仅有一个方法为run方法,如下:public interface Runnable { /** * When an object implementing interface <code>Runnable</code> is used * to create a thread, s...原创 2017-10-23 14:14:43 · 259 阅读 · 0 评论 -
java多线程学习——(2)通过Callable创建线程
在上一篇文章中使用Runnable和Thread两种方式创建线程,这样创建存在一个问题就是我没有办法取到线程返回结果也捕获不到线程运行时的异常。Callable接口的用法:import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurren...原创 2017-10-25 16:12:41 · 282 阅读 · 0 评论 -
java多线程学习——(3)认识yield,join,sleep方法
sleep: sleep()方法是Thread类的一个静态方法,其作用是使当前线程暂停执行一段时间(可自定义暂停时长),让其他线程有机会执行,当调用Thread.sleep()方法后,若有同步代码块(synchronized)该线程不会释放对象锁(排他锁),其他线程无法访问共享数据。demo:public class SleepTest { public static voi...原创 2017-10-25 17:37:46 · 284 阅读 · 0 评论 -
深入理解ThreadLocal
深入理解ThreadLocalThreadLocal 主要用来提供线程局部变量,与线程同步不同,线程同步是多个线程共享同一个变量,而ThreadLocal是为每一个线程维护一个线程的副本。ThreadLocal定义了四个方法: get():返回此线程局部变量的当前线程副本中的值。 initialValue():返回此线程局部变量的当前线程的“初始值”。 remove():移除此线...原创 2018-03-19 10:55:06 · 171 阅读 · 0 评论 -
java多线程学习——(4)java多线程中断机制
理解中断 中断可以理解为线程的一个标识位属性,它表示一个运行中的线程是否被其他线程进行了中断操作。中断好比其他线程对该线程打了个招呼,其他线程通过调用该线程的intercept()方法对其进行中断操作。(引自《java并发编程的艺术》)java中断机制能做什么? 假设现在有一个阻塞方法可能因为等不到所等的事件而无法终止,如果我们想终止该阻塞方法该怎么办? 方法1:调用stop()方法。该...原创 2018-06-16 21:22:48 · 664 阅读 · 0 评论