[转载]SynchronousQueue源码分析

问题(1)SynchronousQueue的实现方式?(2)SynchronousQueue真的是无缓冲的吗?(3)SynchronousQueue在高并发情景下会有什么问题?简介SynchronousQueue是java并发包下无缓冲阻塞队列,它用来在两个线程之间移交元素,但是它有个很大的问题,你

ZGC新一代垃圾收集器笔记

垃圾收集器概述自Java中引入垃圾收集器以来,垃圾收集器的发展从未停止过。Java中成熟的垃圾回收器有串行垃圾收集器、并行垃圾收集器、并发垃圾回收器、并发标记回收期(ConcurrentMarkSweep,CMS)、垃圾优先回收器(GarbasgeFirst,也称为G1).在JDK11中引入了一款新

Java系统性能优化方案

字符串和数字操作构造字符串字符串在Java中是不可变的,无论构造,还是截取,得到的总是一个新字符串。publicString(Stringoriginal){this.value=original.value;this.hash=original.hash;}原有的字符串的value数组直接通过引用

JDK源码阅读:线程池与Future

线程池的实现原理调用方不断地向线程池中提交任务;线程池中有一组线程,不断地从队列中取任务,这是一个典型的生产者-消费者模型。ThreadPoolExecutor/ScheduledThreadPoolExecutor都是基于阻塞队列来实现的,而不是一般的队列,至此,各式各样的阻塞队列就要派上用场了。

JDK源码阅读:并发容器

BlockingQueue在所有的并发容器中,BlockingQueue是最常见的一种。BlockingQueue是一个带阻塞功能的队列,当入队列时,若队列已满,则阻塞调用者;当出队列时,若队列为空,则阻塞调用者。在Concurrent包中,BlockingQueue是一个接口,有许多不同的实现类:

JDK源码阅读:同步工具类

SemaphoreSemaphore也是信号量,提供了资源数量的并发访问控制,其使用代码也很简单。如下所示:Semaphoresemaphore=newSemaphore(10,true);semaphore.acquire();semaphore.release();假设有n个线程来获取Semap

JDK源码阅读:Lock与Condition

互斥锁锁的可重入性因为在Concurrent包中的锁都是可重入锁,所以一般都命名为ReentrantX,因为所有的锁,可重入锁是指当一个线程调用object.lock()拿到锁,进入互斥区后,再次调用object.lock(),仍然可以拿到该锁。很显然,通常的锁都要设计成可重入的,否则就会发生死锁。

JDK源码阅读:Atomic类

AtomicInteger和AtomicLong悲观锁与乐观锁对于悲观锁,作者认为数据发生并发冲突的概率很大,所以在读操作之前就上锁。synchronized关键字,以及后面的ReentrantLock都是悲观锁的典型例子。对于乐观锁,作者认为数据发生并发冲突的概率比较小,所以在读操作之前不上锁。等

JDK源码阅读:多线程基础

线程的优雅关闭stop()与destory()函数线程是一段运行中的代码,或者说是一个运行中的函数,既然是在运行中,就存在一个最基本的问题,运行到一半的线程能否强制杀死。答案是肯定不能,在Java中,有stop和destory函数,但这些函数都是官方明确不建议使用的,原因很简单,如果强制杀死线程,则

java序列化和反序列化

序列化和反序列化作为Java里一个较为基础的知识点,大家心里也有那么几句要说的,但我相信很多小伙伴掌握的也就是那么几句而已,如果再深究问一下Java如何实现序列化和反序列化的,就可能不知所措了!遥记当年也被问了这一个问题,自信满满的说了一大堆,什么是序列化、什么是反序列化、什么场景的时候才会用到等,