
Java并发编程
文章平均质量分 88
Java并发编程
yyangqqian
这个作者很懒,什么都没留下…
展开
-
Java并发编程 之线程池ThreadPoolExecutor详解
文章目录线程池定义使用案例ThreadPoolExecutor 参数详解Executors 线程池工厂工具类线程池定义java.util.concurrent.ThreadPoolExecutor使用案例package fireland.yangqian.thread;import java.util.Random;import java.util.concurrent.Execu...原创 2019-04-15 18:22:34 · 7765 阅读 · 0 评论 -
Java并发编程 之AQS实现原理
AbstractQueuedSynchronizer: 抽象队列同步器。Java并发包下的所有同步类都是基于这个类来实现的。ReentrantLock lock = new ReentrantLock(); // 非公平锁ReentrantLock lock = new ReentrantLock(true); // 公平锁// 多个线程过来,都尝试加锁lock.lock();// 执行代码lock.unlock();AQS加锁过程:线程1、线程2同时执行 lock.lock() 进原创 2021-04-22 10:53:53 · 172 阅读 · 0 评论 -
Java并发编程 之volatile关键字详解
volatile 是 Java 虚拟机提供的轻量级的同步机制保证可见性不保证原子性禁止指令重排JMM概念JMM(Java内存模型Java Memory Model)本身是一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方成为栈空间),工作内存是每个线程的私有数据区域,而Java内存模型中规定所有变量都存储在主内存,主原创 2021-01-13 13:44:03 · 334 阅读 · 0 评论 -
Java并发编程 之创建线程的四种方式
1、继承Thread类创建线程2、实现Runnable接口创建线程3、使用Callable和FutureTask创建线程4、使用线程池例如用Executor框架继承Thread类创建线程class MyThread extends Thread { @Override public void run() { System.out.println("Hello Thread"); }}public class ThreadDemo { publi原创 2020-12-08 17:18:35 · 506 阅读 · 0 评论 -
Java并发编程 之LockSupport
LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。原创 2020-12-08 15:14:56 · 296 阅读 · 0 评论 -
Java并发编程 之实现生产者消费者
上联:线程、操作(对外暴露的调用方法)、资源类下联:判断、干活、唤醒通知横幅:严防多线程并发状态下的虚假唤醒使用synchronize以及wait()、notify() /notifyAll()package com.example;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;class ShareData { public st原创 2020-12-06 14:51:55 · 290 阅读 · 0 评论 -
Java并发编程 之阻塞队列
文章目录阻塞队列阻塞队列好处阻塞队列阻塞队列,顾名思义,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如图所示:线程1往阻塞队列中添加元素,线程2从阻塞队列中移除元素。当阻塞队列是空时,从队列中获取元素的操作将会被阻塞。当阻塞队列是满时,往队列中添加元素的操作将会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他线程从队列中移除一个或者多个元素或者完全清空队列后使队列重新原创 2020-11-15 14:53:30 · 254 阅读 · 1 评论 -
Java并发编程 之锁
文章目录公平锁非公平锁可重入锁(又名递归锁)ReentrantLock独占锁、共享锁公平锁类似排队打饭,先来后到,多个线程按照申请锁的顺序来获取锁。非公平锁无需排队可以加塞,多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情况下,有可能造成优先级反转或者饥饿现象。非公平锁的优点在于吞吐量比公平锁大。对于Synchronized而言也是一种非公平锁。可重入锁(又名递归锁)ReentrantLock可重入锁,也叫递归锁。同一线程外层函数获得锁之原创 2020-11-08 10:42:05 · 239 阅读 · 0 评论 -
Java并发编程 之CountDownLatch、CyclicBarrier、Semaphore同步辅助类
文章目录CountDownLatch是什么CountDownLatch构造函数和方法CountDownLatch使用场景CountDownLatch是什么从这个类的字面意思来入手,CountDown 是倒计时的意思,Latch 是门栓的意思,加起来的意思就是一个倒计时的门栓。它其实是作用于线程当中的,它就像一个门栓,一开始是关闭的,所有希望通过该门的线程都需要等待,然后开始倒计时,当倒计时一到,等待的所有线程都可以通过。要注意的是,它是一次性的,打开之后就不能关上了。CountDownLatch可原创 2020-09-28 14:11:59 · 307 阅读 · 0 评论 -
Java并发编程 之CAS
CAS:比较并交换原创 2020-08-11 21:12:49 · 539 阅读 · 0 评论 -
Java并发编程 之Future、ListenableFuture
Guava 定义了 ListenableFuture 接口并继承了JDK concurrent包下的 Future 接口。原创 2020-02-28 11:21:04 · 498 阅读 · 0 评论 -
Java并发编程 之ThreadLocal
文章目录ThreadLocal 简单使用ThreadLocal 简单使用原创 2019-04-24 16:40:27 · 1118 阅读 · 0 评论 -
Java并发编程 之 Synchronized 和 ReentrantLock 区别
什么是可重入锁:同一个线程对同一个锁可多次加锁,但是加锁次数和释放锁次数一定要一一对应,否则就出现死锁。一般情况下多次加锁没意义,所以基本是使用可重入锁中的可中断功能和公平锁、非公平锁功能和条件唤醒功能。ReentrantLock 使用 Condition 案例:import java.util.concurrent.locks.Condition;import java.util.con...原创 2019-06-25 18:12:45 · 631 阅读 · 0 评论 -
Java并发编程 之限流
目录保护系统机制常用的限流算法Semaphore 信号量RateLimiter 限流工具类CountDownLatch 计数器保护系统机制在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存:提升系统访问速度和增大系统处理容量。降级:当服务出现问题获取影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开。限流:通过对并发访问/请求进行限速,一旦达到限制速率则可以拒绝...原创 2019-04-15 16:32:08 · 1882 阅读 · 0 评论