java并发
关于并发的理解和总结
荼白z
这个作者很懒,什么都没留下…
展开
-
[java 并发]你真的了解线程池吗?
为什么线程池预先创建若干数量的线程,用户不能直接对线程的创建进行控制,重复使用固定或较为固定的线程来完成任务执行,消除了频繁创建和消亡线程的资源开销,面对过量任务的提交也能够平缓劣化线程池种类Executors.newCachedThreadPool()可缓存线程池,当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(一般是60秒无执行)的线程,当有任务来时,智能的添加新线程来执行。队列:LinkedBlockingDeque - 由链表结构组成的双向阻塞队列Executors.原创 2020-08-23 21:10:07 · 255 阅读 · 0 评论 -
ThreadLocal和内存泄露
1. ThreadLocal是什么?线程变量,属于当前线程,该变量对其他线程是隔离的,为变量在每个线程中都创建了一个副本,每个线程都可以访问自己内部的副本变量使用场景:1、在进行对象跨层传递的时候,使用ThreadLocal可以避免多次传递,打破层次间的约束。2、线程间数据隔离3、进行事务操作,用于存储线程事务信息。4、数据库连接,Session会话管理。2. 怎么用public static void main(String[] args) { //新建一个ThreadLocal原创 2020-07-26 20:58:03 · 247 阅读 · 0 评论 -
[java 并发] ReentrantLock源码详细解读
对于reentrantlock的源码详细解读,包括AQS内部类的关系及使用原创 2020-06-28 16:05:19 · 207 阅读 · 0 评论 -
[java 并发] ReentrantLock公平锁和非公平锁的实现
reentrantlock可以实现公平锁和非公平锁 ReentrantLock lock=new ReentrantLock(false); public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync(); }非公平锁中源码如下 final void lock() { // 如果cas尝试获取锁成功(将state锁状态从0设置为原创 2020-06-21 20:59:05 · 541 阅读 · 0 评论 -
详解类的加载过程
类加载主要职责就是加载各种 class 文件到 JVM 中,类的加载过程主要分为三个阶段:加载、连接、初始化其中连接又分为:验证、准备、解析三个过程加载类的加载就是将class文件中的二进制数据读取到内存中,然后将该字节流锁代表的静态存储结构转换为方法区中运行时的数据结构,并且在堆内存中生成一个该类的java.lang.Class 对象,作为访问方法区数据结构的入口。连接1. 验证验证阶段主要是确保class文件的字节流锁包含的内容符合当前 jvm 规范的要求,并且不会出现危害 jvm 自原创 2020-05-17 20:37:49 · 337 阅读 · 0 评论 -
JUC包下关于并发的工具类
在学习多线程的时候还是需要一些工具来加持,所以介绍一下JUC中关于并发的工具类,主要有CountDownLatch、CyclicBarrierDemo、SemaphoreDemo、Phaser、ExchangerCountDownLatch 门闩门闩能够使一个线程在等待另一些线程完成各自的工作后再继续执行。通过使用计数器来实现,计数器的初始值为线程的数量,每当一个线程完成自己的任务后,通过countDown() 方法将计数器减一,当计数器的值为 0 时,表示所有的线程都完成各自的任务,这时等待的线程原创 2020-05-10 16:13:41 · 256 阅读 · 0 评论 -
[CAS] getAndIncrement() 和 incrementAndGet() 方法的区别
执行下段代码public static void main(String[] args) { AtomicInteger one =new AtomicInteger(5); int a =one.getAndIncrement(); System.out.println("a="+a); System.out.println("o...原创 2020-05-03 20:30:58 · 1800 阅读 · 1 评论