Java
java知识点总结
Brycen Liu
想足够优秀,再大方拥有。
展开
-
Java高并发编程利用CAS实现一个无锁队列-刘宇
作者:刘宇。一、什么是无锁(Lock-Free)队列二、线程不安全的队列三、线程安全的无锁队列一、什么是无锁(Lock-Free)队列在多线程操作中,我们通常会添加锁来保证线程的安全,那么这样势必会影响程序的性能。那么为了解决这一问题,于是就有了在无锁操作的情况下依然能够保证线程的安全,实现无锁的原理就是利用了Campare and swap(CAS)算法,关于CAS算法在前面的Atomic原子类和Unsafe中都有讲解:Atomic原子类博客、Unsafe博客。而我们的无锁队列无疑也是使用了这一方法。原创 2020-08-30 20:26:20 · 874 阅读 · 0 评论 -
Java线程池队列DelayQueue的使用及详细介绍-刘宇
作者:刘宇。一、什么是DelayQueue?DelayQueue顾名思义,它是个无边界延迟队列,它的底层是基于PriorityBlockingQueue实现的。该队列中的元素都是按照过期时间顺序排序的,队列头部放的是即将过期的元素。该队列中的元素必须实现Delayed接口,getDelay定义了剩余到期时间,compareTo方法定义了元素排序规则。该队列不允许存放null元素。延时队列实现了Iterator接口,但Iterator()遍历顺序不保证是元素的实际存放顺序。原创 2020-08-27 23:41:57 · 4406 阅读 · 0 评论 -
Java线程池队列SynchronousQueue的详细原理分析-刘宇
Java线程池队列SynchronousQueue的详细原理分析-刘宇一、什么是SynchronousQueue?二、SynchronousQueue类的结构图三、SynchronousQueue的小Demo四、SynchronousQueue源码分析1、构造方法2、put方法3、take方法4、栈结构4.1、常量讲解4.2、TransferStack讲解4.2.1、前期代码4.2.2、核心代码4.2.3、线程阻塞的实现4.2.4、不公平策略下队列图解4.3、栈结构小总结5、队列结构5.1、前期代码5.2、转载 2020-08-25 10:20:16 · 5236 阅读 · 0 评论 -
Java线程池队列PriorityBlockingQueue的详细原理分析-刘宇
作者:刘宇。PriorityBlockingQueue队列是 JDK1.5 的时候出来的一个阻塞队列。但是该队列有个入队的时候是不会阻塞的,永远会加到队尾。下面我们介绍下它的几个特点:PriorityBlockingQueue 和 ArrayBlockingQueue 一样是基于数组实现的,但后者在初始化时需要指定长度,前者默认长度是 11。该队列可以说是真正的无界队列,它在队列满的时候会进行扩容,而前面说的无界阻塞队列其实都有有界,只是界限太大可以忽略(最大值是 2147483647)转载 2020-08-24 14:33:04 · 1608 阅读 · 0 评论 -
Java线程池队列ArrayBlockingQueue的详细原理分析-刘宇
作者:刘宇。一、什么是ArrayBlockingQueue?二、使用场景三、ArrayBlockingQueue的类图四、BlockingQueue讲解五、ArrayBlockingQueue源码解析1、参数解释2、构造方法3、核心方法3.1、put方法3.2、入队的具体实现3.3、入队图解3.4、take方法3.5、出队的具体实现3.6、出队图解。ArrayBlockingQueue是一个阻塞的队列,继承了AbstractBlockingQueue,间接的实现了Queue接口和Collection接口。转载 2020-08-21 15:24:01 · 667 阅读 · 0 评论 -
Java线程池队列LinkedTransferQueue的详细原理分析-刘宇
作者:刘宇。一、什么是LinkedTransferQueue?二、LinkedTransferQueue类的结构图三、TransferQueue讲解四、LinkedTransferQueue源码讲解1、重要的字段2、Node 内部类3、重要的几个常量4、xfer方法5、入队的具体实现6、入队图解7、出队图解一、什么是LinkedTransferQueue?LinkedTransferQueue是一个由链表结构组成的无界阻塞TransferQueue队列。转载 2020-08-20 23:47:17 · 1047 阅读 · 0 评论 -
Java线程池队列LinkedBlockingDeque的详细原理分析-刘宇
作者:刘宇。一、 什么是LinkedBlockingDeque?二、LinkedBlockingDeque类的关系图三、BlockingDeque介绍四、LinkedBlockingDeque源码解析1、字段解析2、入队操作2.1、putFirst方法2.2、offerFirst方法2.3、入队的具体实现2.4、入队图解3、出队操作3.1、takeLast方法3.2、pollLast方法3.3、出队的具体实现3.4、出队图解五、总结。LinkedBlockingDeque是一个由链表结构组成的双向阻塞队列。转载 2020-08-20 22:34:44 · 1914 阅读 · 0 评论 -
Java线程池队列LinkedBlockingQueue的详细原理分析-刘宇
作者:刘宇。一、什么是LinkedBlockingQueue?二、LinkedBlockingQueue类图三、BlockingQueue的方法四、LinkedBlockingQueue讲解1、内部使用到的锁2、多种入队方法比较3、源码解析3.1、put方法3.2、offer方法3.3、take方法3.4、poll方法。LinkedBlockingQueue内部由单链表实现,按 FIFO(先进先出)排序元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。转载 2020-08-20 22:25:41 · 2518 阅读 · 0 评论 -
Java线程池队列ArrayBlockingQueue的使用及详细介绍-刘宇
作者:刘宇。一、什么是ArrayBlockingQueue?ArrayBlockingQueue是一个阻塞的队列,继承了AbstractBlockingQueue,间接的实现了Queue接口和Collection接口。底层以数组的形式保存数据(实际上可看作一个循环数组),所以它是基于数组的阻塞队列。ArrayBlockingQueue是有边界值的,在创建ArrayBlockingQueue时就要确定好该队列的大小,一旦创建,该队列大小不可更改。内部的全局锁是使用的ReentrantLock。原创 2020-08-19 23:22:13 · 10371 阅读 · 0 评论 -
Java高并发编程中ScheduledExecutorService的使用及详细介绍-刘宇
作者:刘宇。一、什么是ScheduledExecutorService?二、ScheduledThreadPoolExecutor中的方法1、构造方法2、schedule方法3、scheduleAtFixedRate方法4、scheduleWithFixedDelay方法5、setContinueExistingPeriodicTasksAfterShutdownPolicy方法6、setExecuteExistingDelayedTasksAfterShutdownPolicy方法三、练习原创 2020-08-19 23:13:59 · 16911 阅读 · 0 评论 -
Java高并发编程中CompletionService的使用及详细介绍-刘宇
作者:刘宇。一、什么是CompletionService?二、ExecutorCompletionService中的方法1、构造方法2、submit方法3、take方法4、poll方法三、案例1、问题复现2、利用CompletionService解决问题一、什么是CompletionService?它是Java8的新增接口,它的实现类是ExecutorCompletionService。CompletionService会根据线程池中Task的执行结果按执行完成的先后顺序排序,任务先完成的可优先获取到。原创 2020-08-19 21:09:36 · 7645 阅读 · 0 评论 -
Java高并发编程中Future的使用及详细介绍-刘宇
作者:刘宇。一、什么是Future?二、Future的结构图三、Future中的方法1、cancel方法2、isCancelled方法3、isDone方法4、get方法5、超时get方法四、Future练习1、get方法练习2、打断get方法3、其他方法练习一、什么是Future?在我们并发编程中,使用thread或runnable接口都不能获取异步的执行结果,因为他们都没有返回值。而通过实现Callable接口和Future就可以获取异步执行的结果,当异步执行结束后,返回结果将保存在我们的Future中。原创 2020-08-17 22:45:33 · 2213 阅读 · 0 评论 -
Java高并发编程中Executors静态工厂的使用及详细介绍-刘宇
作者:刘宇。一、Executors静态工厂的作用二、newCachedThreadPool1、newCachedThreadPool的特点2、适用场景3、演示案例三、newFixedThreadPool1、newFixedThreadPool的特点2、适用场景3、演示案例四、newSingleThreadExecutor1、newSingleThreadExecutor的特点2、适用场景3、演示案例五、newWorkStealingPool1、newWorkStealingPool的特点2、适用场景原创 2020-08-14 14:38:06 · 437 阅读 · 0 评论 -
Java高并发编程中ThreadPoolExecutor的使用及详细介绍-刘宇
作者:刘宇。一、什么是ThreadPoolExecutor?二、ThreadPoolExecutor的方法详解1、4种构造方法2、构造方法中参数详解2.1、corePoolSize2.2、maximumPoolSize2.3、keepAliveTime2.4、unit2.5、workQueue2.6、threadFactory2.6、handler3、其他基本方法3.1 execute方法3.2 getCorePoolSize方法3.3 getMaximumPoolSize方法3.4 getQueue方法原创 2020-08-14 14:33:13 · 1683 阅读 · 0 评论 -
Java高并发编程中Executor、ExecutorService的使用及详细介绍-刘宇
作者:刘宇。一、什么是Executor框架二、Executor框架示意图三、ExecutorService的方法详解1、submit方法2、invokeAny方法3、invokeAll方法4、awaitTermination方法5、isShutdown方法6、shutdown方法7、shutdownNow方法8、isTerminated方法四、ExecutorService练习1、如何捕获线程执行过程中出现的异常并处理1.1 利用Thread中uncaughtExceptionHandler来处理原创 2020-08-12 23:59:21 · 3992 阅读 · 0 评论 -
Java高并发编程中Phaser的使用及详细介绍-刘宇
作者:刘宇。一、什么是Phaser?二、Phaser的常用方法1、register方法2、bulkRegister方法3、getRegisteredParties方法4、arriveAndAwaitAdvance方法5、arriveAndDeregister方法6、arrive方法7、awaitAdvance方法8、awaitAdvanceInterruptibly方法9、getArrivedParties方法10、getUnarrivedParties方法11、isTerminated方法原创 2020-08-11 13:47:01 · 4835 阅读 · 0 评论 -
Java高并发编程中ForkJoinPool的使用及详细介绍-刘宇
作者:刘宇。一、什么是ForkJoinPool?通常在计算机中,每个任务都是交由每个线程来处理的,当一个非常耗时的任务交由一个线程来完成,而其他线程处于空闲状态时就显得不太合理。ForkJoinPool又叫分而治之,通俗来讲就是帮我们把一个任务分成许多小任务给不同的线程执行,然后通过join将多个线程处理的结果进行汇总返回。1、ForkJoinPool内部中将Task分为两种:SubmissionTask:本地线程调用submit方法提交了任务、WorkerTask:框架内部fork出来的子任务。原创 2020-08-09 22:54:38 · 8559 阅读 · 0 评论 -
Java高并发编程中StampedLock的使用及详细介绍-刘宇
作者:刘宇。一、什么是StampedLock?他基本包含了ReentrantLock和ReentrantReadWriteLock的一些方法,是对ReentrantReadWriteLock锁的增强方法。他的出现是要解决ReentrantReadWriteLock在读写分离时的线程饥饿问题。当ReentrantReadWriteLock对其写锁想要获取的话,就必须没有任何其他读写锁存在才可以,这实现了悲观读取。如果读操作很多,写很少的情况下,线程有可能就会遭遇饥饿问题。原创 2020-08-09 16:18:53 · 1122 阅读 · 1 评论 -
Java高并发编程中Condition在Lock中所充当的角色及用法-刘宇
作者:刘宇。一、什么是Condition?二、Condition常用方法1、await方法2、awaitNanos方法3、awaitUninterruptibly方法4、awaitUntil方法5、signal方法6、signalAll方法二、Condition练习1、单个Condition制作生产者与消费者2、多个Condition制作生产者与消费者。condition对象是依赖于lock对象的,是通过lock对象调用newCondition()方法创建出来的。原创 2020-08-06 13:55:55 · 177 阅读 · 0 评论 -
Java高并发编程中ReentrantLock、ReentrantReadWriteLock的使用及详细介绍-刘宇
作者:刘宇。一、ReentrantLock的简单介绍二、ReentrantReadWriteLock的简单介绍三、Lock接口1、lock方法2、lockInterruptibly方法3、tryLock方法4、unlock方法5、newCondition方法四、ReentrantLock的额外方法1、构造方法2、getOwner方法3、isHeldByCurrentThread方法4、isLocked方法5、isFair方法6、hasQueuedThreads方法7、hasQueuedThread方法原创 2020-08-05 19:37:50 · 446 阅读 · 0 评论 -
Java高并发编程中Semaphore的使用及详细介绍-刘宇
作者:刘宇。一、什么是Semaphore?二、常用方法1、构造函数2、acquire方法3、release方法4、acquireUninterruptibly方法5、getQueueLength方法6、availablePermits方法7、hasQueuedThreads方法8、getQueuedThreads方法9、tryAcquire方法一、什么是Semaphore?Semaphore 是 synchronized 的加强版,可以控制线程的并发数量,而单纯的synchronized是无法做到这一点的原创 2020-08-04 12:45:58 · 1956 阅读 · 2 评论 -
Java高并发编程中Exchanger的使用及详细介绍-刘宇
作者:刘宇。Java高并发编程中Exchanger的使用及详细介绍-刘宇一、什么的Exchanger二、Exchanger的基本使用1、构造函数2、exchange()3、exchange(V x, long timeout, TimeUnit unit)三、简单示例1、exchange()2、exchange(V x, long timeout, TimeUnit unit)3、exchange传递对象时,传递的是否是引用。一、什么的Exchanger主要用于一对线程之间交换信息,必须是给成对的线程使用。原创 2020-08-03 09:09:19 · 532 阅读 · 0 评论 -
Java高并发编程中CyclicBarrier的使用及详细介绍-刘宇
作者:刘宇。Java高并发编程中CyclicBarrier的使用及详细介绍一、什么是CyclicBarrier二、CyclicBarrier的简单使用1、构造方法2、await()3、await(long timeout, TimeUnit unit)4、getParties()5、isBroken()6、getNumberWaiting()三、简单示例四、什么时候会出现BrokenBarrierException异常五、CyclicBarrier和CountDownLatch的区别原创 2020-08-02 14:30:23 · 264 阅读 · 0 评论 -
Java高并发编程中CountDownLatch的详细介绍-刘宇
作者:刘宇。CountdownLatch简介:CountDownLatch是一个同步工具类,用来协调多个线程之间的同步。CountDownLatch能够使一个或多个线程在等待其他一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,则表示所有的线程都已经完成任务,然后在CountDownLatch上等待的线程就会继续执行下面的代码。原创 2020-08-01 17:19:34 · 532 阅读 · 0 评论 -
Java中邪恶的Unsafe,一半天使一半魔鬼-刘宇
作者:刘宇。一、什么是Unsafe二、获取Unsafe三、Unsafe的功能汇总1、内存操作2、CAS相关3、线程调度4、Class相关5、对象操作6、内存屏障7、系统相关四、邪恶的Unsafe1、通过unsafe绕过构造函数2、通过unsafe修改对象中的属性3、通过unsafe加载类五、Lock、synchronized、Atomic、Unsafe在多线程下的性能比较1、无任何锁时2、加上synchronized锁时3、加上lock锁时4、加上Atomic原子类型时5、通过Unsafe自定义CAS算法原创 2020-07-31 12:28:04 · 360 阅读 · 0 评论 -
Java中Atomic原子类型的详细讲解(二)-刘宇
作者:刘宇。JAVA中原子类型详细讲解(二)一、AtomicReference介绍简述简单使用二、CompareAndSwap算法带来的ABA问题问题概述ABA问题之队列三、AtomicStampedReference介绍原理源码解释练习四、AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray介绍创建get()set()getAndSet()compareAndSet()原创 2020-07-30 09:09:21 · 732 阅读 · 0 评论 -
Java中Atomic原子类型的详细讲解(一)-刘宇
作者:刘宇。JAVA中原子类型详细解释一、什么是原子类型二、原子类型的实现原理三、利用volatile关键字演示原子性问题演示为什么多个线程会输出相同的结果四、利用AtomicInteger解决原子性问题五、AtomicInteger的基本使用1、AtomicInteger的创建和get()方法2、set()3、getAndSet(int)4、getAndAdd(int)5、addAndGet(int)6、getAndIncrement()7、incrementAndGet()原创 2020-07-30 09:07:05 · 3036 阅读 · 4 评论 -
Java中JVM类加载器详细介绍-刘宇
作者:刘宇。JVM类加载器详细介绍一、什么是类加载器二、类加载器的分类三、父委托加载机制优点名词解释三、自定义类加载器一、什么是类加载器根据一个指定的类的全限定名,找到对应的Class字节码文件,然后加载它转化成一个java.lang.Class类的一个实例。并且这个类对应的Class实例在堆区无论你加载多少次只会存在一个,除非使用不同的加载器去加载这个类,则会出现多个的效果。这是因为不同的加载器会出现命名空间的问题。二、类加载器的分类原创 2020-07-26 13:12:37 · 376 阅读 · 0 评论 -
Java中ClassLoader的加载过程-刘宇
作者:刘宇。JAVA中ClassLoader的加载过程1、基本概念1.1、如何结束JVM生命周期1.2、类加载的三个过程1.3、Java程序对类的使用方式主要分为两种1.3.1、主动使用:1.3.2、被动使用:1.3.3、特殊使用情况:1.4、类加载过程小练习2、JVM简单介绍2.1、虚拟机所管理的内存2.2、程序计数器2.3、Java 虚拟机栈2.4、本地方法栈2.5、Java 堆2.6、方法区3、类加载的三个阶段详解3.1、加载阶段3.1.1、加载类的方式。原创 2020-07-25 18:16:10 · 712 阅读 · 0 评论