![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
quokka_1009
这个作者很懒,什么都没留下…
展开
-
Java Thread 线程的 创建,运行,使用方式
线程执行方式:顺序执行 run()并行执行 start()启动线程的方式:继承 Thread 重写 run 方法new MyThread().start();实现 Runnable 接口 重写 run 方法new Thread(new MyRun()).start();Lambda 表达式new Thread(() -> {…}).start();线程池开启线程:Executors.newFixedThreadPool(5);线程方法:让出线程: t.yiel原创 2021-01-04 15:36:09 · 371 阅读 · 0 评论 -
JUC同步锁: LockSupport 代码Demo
LockSupport 主要用于对线程执行暂停(park)和唤醒(unpark)import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.LockSupport;public class LockSupportDemo { public static void main(String[] args) { Thread t = new Thread(() -> {原创 2021-01-21 00:40:48 · 143 阅读 · 0 评论 -
JUC同步锁: Exchanger 代码Demo
Exchanger 交换 线程之间交换数据exchanger.exchange("交换的数据")import java.util.concurrent.Exchanger;public class ExchangerDemo { static Exchanger<String> exchanger = new Exchanger<>(); public static void main(String[] args) { new Threa原创 2021-01-21 00:40:56 · 160 阅读 · 0 评论 -
JUC同步锁: Semaphore 代码Demo
Semaphore: 可以用来限流Semaphore(2); // 可以同时获得许可的数量Semaphore(2,true); // 可以同时获得许可的数量 ,公平锁 默认不开启semaphore.acquire(); // 获得许可semaphore.release(); // 释放许可import java.util.concurrent.Semaphore;public class SemaphoreDemo { public static void main(Stri原创 2021-01-21 00:41:04 · 101 阅读 · 0 评论 -
JUC同步锁: ReentrantReadWriteLock (读写锁)代码Demo 与 ReentrantLock(可重入锁) 代码Demo 对比
ReentrantLock 可重入锁: 线程进入后上锁,若同一线程进去可以再次进入 方法: new ReentrantLock(true) ; // 加 true 后变为 公平锁 Lock lock = new ReentrantLock() lock.lock() 上锁 lock.unlock() 解锁 ( ← 一定要写在 try finally 的 finally 中) ReadWriteLock 读写锁: 共享锁 排他锁 (互斥锁)import java.util原创 2021-01-21 00:41:10 · 89 阅读 · 0 评论 -
JUC同步锁: MarriagePhaser 代码Demo
说明: 不同的阶段 对线程不同的执行 phaser.bulkRegister(7); // 线程数量 phaser.register(); // 登记 phaser.arriveAndAwaitAdvance(); // 提前到达并等待 phaser.arriveAndDeregister(); // 到达和取消注册 Phaser类的onAdvance方法 每次阶段达到后自动执行import java.util.concurrent.Phaser;import java.uti原创 2021-01-21 00:41:18 · 396 阅读 · 0 评论 -
JUC同步锁: CyclicBarrier 代码Demo
说明: new CyclicBarrier(20); -> 满20个线程 运行一次 不满不停场景: 比如一个线程redis 一个线程mysql ... 都执行完后做后面的操作 复杂操作: 1: 数据库 2: 网络 3: 文件 并发执行: 线程 - 操作 线程 - 操作 import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;原创 2021-01-21 00:41:26 · 94 阅读 · 0 评论 -
JUC各种同步锁:CountDownLatch、CyclicBarrier、MarriagePhaser、ReadWriteLock、Semaphore、Exchanger、LockSupport
1、CountDownLatch (门栓锁)CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务。CountDownLa原创 2021-01-21 00:40:40 · 260 阅读 · 0 评论 -
JUC同步锁: CountDownLatch 代码Demo 与 thread.join() Demo 对比
CountDownLatch 流程与 thread.join() 方法类似CountDownLatch 好比门栓CountDownLatch latch = new CountDownLatch(number); // 门栓数量latch.countDown(); // 倒数计算 CountDownLatch(number) 的 number - 1;latch.getCount(); // 获取剩余门栓数量,当 latch.getCount()=0时线程会自动唤醒latch.awai原创 2021-01-20 00:21:23 · 122 阅读 · 0 评论