并发编程
Felix_XY
腹有雅量气自华
展开
-
多线程(十二)JUC之Condition等待与唤醒
Condition条件唤醒在并行程序中, 避免不了某些线程要预先规定好的顺序执行, 例如, 先新增再修改, 先买后卖, 先进后厨 … 对于这类场景, 使用JUC的Condition对象非常合适JUC中提供了Condition对象, 用于让指定线程等待与唤醒, 按照预期顺序执行, 它必须和ReentrantLock重入锁配合使用Conddition用于替代wait() / noti...原创 2019-09-25 16:42:08 · 387 阅读 · 0 评论 -
多线程(十一)JUC之ReentrantLock重入锁
–重入锁: 指的是任意线程在获取锁之后, 再次获取该锁而不会被该锁所阻塞–ReentrantLock设计的目标是用来替代synchronized关键字原创 2019-09-25 16:17:27 · 223 阅读 · 0 评论 -
多线程(十)JUC之CyclicBarrier循环屏障
CyclicBarrier是一个同步工具类, 它允许一组线程互相等待, 直到到达某个公共屏障点, 与CountDownLatch不同的是该barrier在释放等待线程后可以重用, 所以称它为循环(Cyclic)的屏障(Barrier)–只有4个线程全都就绪了, 才开始运行–示例代码package com.ygq.thread.threadPool;import java.util....原创 2019-09-25 16:13:59 · 259 阅读 · 0 评论 -
多线程(九)JUC之Semaphore信号量
–Semaphore信号量的作用–Semaphore信号量经常用于限制获取某种资源的线程数量, 比如下面这个例子:操场上游5个跑道, 一个跑道一次只能有一个学生在上面跑步, 一旦所有跑道在使用, 那么后面的学生就需要等待, 知道有一个学生不跑了–acquire() //获取一个信号量–release() //执行完成之后释放信号量–案例1package com.ygq.t...原创 2019-09-25 16:10:55 · 268 阅读 · 0 评论 -
多线程(八)CountDownLatch-倒计时锁
–CountDownLatch倒计时锁特别适合"总-分任务", 例如多线程计算后的数据汇总–CountDownLatch类位于Java.util.concurrent(J.U.C) 包下, 利用它可以实现类似计数器的功能, 比如有一个任务A, 它要等待其他3个任务执行完毕之后才能执行, 此时就可以利用CountDownLatch来实现这种功能了–示例代码package com.ygq.th...原创 2019-09-25 16:08:09 · 372 阅读 · 0 评论 -
多线程(七)并发工具包与线程池
目录--java.util.concurrent--new Thread的弊端--ThreadPool - 线程池--线程池的种类--CachedThreadPool() 可缓存线程池--定长线程池--SingleThreadExecutor() 单线程池--ScheduledExecutorService--线程池经典应用–java.util.concurrent–并发是伴随这多核处理...原创 2019-09-25 16:05:42 · 281 阅读 · 0 评论 -
多线程(六)线程安全
线程安全–在拥有共享数据的多条线程并行执行的程序中, 线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行, 不会出现数据污染等意外的情况–可以选择使用synchronized来保证线程安全线程安全与不安全的区别–线程安全:–优点: 可靠–缺点:执行速度慢–使用建议:需要线程共享时使用–线程不安全:– 优点: 速度快– 缺点: 可能与预期不符...原创 2019-09-25 15:59:46 · 199 阅读 · 0 评论 -
多线程(五)线程的5种状态以及死锁
–阻塞–I/O: 可能线程在进行一个大数据的I/O操作, 导致程序看上去假死,导致的阻塞–sleep(): 线程处于休眠状态–lock: 等待锁资源的时候–yield: 主动将CPU时间片释放–死锁案例package com.ygq.thread;/** * @author :GQ.Yin * @date :Created in 2019/7/21 20:46 ...原创 2019-09-25 15:56:37 · 691 阅读 · 0 评论 -
多线程(四)多线程的同步机制
为了避免在同一时刻对同一个资源有多个线程访问造成的不可预知问题, 所以采用线程的同步机制–代码中的同步机制–synchronized(同步锁)关键字的作用就是利用一个特定的对象设置一个锁lock, 在多线程并发访问的时候, 同事只允许一个线程, 可以获得这个锁, 执行特定的代码, 执行之后释放锁, 继续有其他线程争抢–Synchronize的使用场景–synchronized代码块 ...原创 2019-09-25 15:49:50 · 600 阅读 · 0 评论 -
多线程(三)创建多线程
目录Java中创建线程的三种方式继承Thread类实现多线程实现Runnable接口利用线程池-实现Callable接口Java中创建线程的三种方式–继承Thread类创建线程–实现Runnable接口创建线程–使用Callable 和Future创建线程继承Thread类实现多线程package com.ygq.thread;import java.util.Random...原创 2019-09-25 15:46:13 · 236 阅读 · 0 评论 -
多线程(二)内存模型JMM
Java内存模型(Java Memory Model)针对下面的一小段代码来进行一个执行分析。示例代码package com.uinnova.di.dism;public class Employee { private String name; private Integer age; private Department department; pr...原创 2019-09-25 15:41:16 · 222 阅读 · 0 评论 -
多线程(一)基本概念
目录程序、进程、线程并发、并行同步、异步临界区死锁、饥饿、活锁线程安全程安全三大特性程序、进程、线程–程序: 静态的概念, windows下通常指的exe文件–进程: 动态的概念, 是程序在运行的状态, 进程说明程序在内存中的边界–线程: 是进程内的一个 “基本任务”, 每个线程都有自己的功能, 是CPU分配与调度的基本单位并发、并行同步、异步临界区临界区: 用来表...原创 2019-09-25 15:24:51 · 200 阅读 · 0 评论