![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
Felix_XY
腹有雅量气自华
展开
-
三种分布式锁
### 什么是锁?在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。而同步的本质是通过锁来实现的。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么需要在某个地方做个标记,这个标记必须每个线程都能看到,当标记不存在时可以设置该标记,其余后续线程发现已经有标记了则等待拥有标记的线...转载 2019-12-25 12:50:52 · 323 阅读 · 0 评论 -
java IO、NIO、AIO详解
概述一、IO流(同步、阻塞)二、NIO(同步、非阻塞)三、NIO2(异步、非阻塞) 概述在我们学习Java的IO流之前,我们都要了解几个关键词同步与异步(synchronous/asynchronous):同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调用返回,才会进行下一步;而异步则相反,其他任务不需要等待当前调用返回,通常依靠事件、回调等机制...转载 2019-12-17 10:30:29 · 250 阅读 · 0 评论 -
漫谈Java IO之 Netty与NIO服务器
前面介绍了基本的网络模型以及IO与NIO,那么有了NIO来开发非阻塞服务器,大家就满足了吗?有了技术支持,就回去追求效率,因此就产生了很多NIO的框架对NIO进行封装——这就是大名鼎鼎的Netty。前几篇的内容,可以参考:网络IO的基本知识与概念普通IO以及BIO服务器NIO的使用与服务器Hello worldNetty的使用与服务器Hello world为什么要使用...转载 2019-12-17 10:24:56 · 272 阅读 · 0 评论 -
CAS介绍
众所周知锁有两种:乐观锁与悲观锁。 独占锁是一种悲观锁,而 synchronized 就是一种独占锁,synchronized 会导致其它所有未持有锁的线程阻塞,而等待持有锁的线程释放锁。 &n...转载 2019-12-16 10:23:14 · 550 阅读 · 0 评论 -
多线程(十二)JUC之Condition等待与唤醒
Condition条件唤醒在并行程序中, 避免不了某些线程要预先规定好的顺序执行, 例如, 先新增再修改, 先买后卖, 先进后厨 … 对于这类场景, 使用JUC的Condition对象非常合适JUC中提供了Condition对象, 用于让指定线程等待与唤醒, 按照预期顺序执行, 它必须和ReentrantLock重入锁配合使用Conddition用于替代wait() / noti...原创 2019-09-25 16:42:08 · 356 阅读 · 0 评论 -
多线程(十一)JUC之ReentrantLock重入锁
–重入锁: 指的是任意线程在获取锁之后, 再次获取该锁而不会被该锁所阻塞–ReentrantLock设计的目标是用来替代synchronized关键字原创 2019-09-25 16:17:27 · 211 阅读 · 0 评论 -
多线程(十)JUC之CyclicBarrier循环屏障
CyclicBarrier是一个同步工具类, 它允许一组线程互相等待, 直到到达某个公共屏障点, 与CountDownLatch不同的是该barrier在释放等待线程后可以重用, 所以称它为循环(Cyclic)的屏障(Barrier)–只有4个线程全都就绪了, 才开始运行–示例代码package com.ygq.thread.threadPool;import java.util....原创 2019-09-25 16:13:59 · 234 阅读 · 0 评论 -
多线程(九)JUC之Semaphore信号量
–Semaphore信号量的作用–Semaphore信号量经常用于限制获取某种资源的线程数量, 比如下面这个例子:操场上游5个跑道, 一个跑道一次只能有一个学生在上面跑步, 一旦所有跑道在使用, 那么后面的学生就需要等待, 知道有一个学生不跑了–acquire() //获取一个信号量–release() //执行完成之后释放信号量–案例1package com.ygq.t...原创 2019-09-25 16:10:55 · 251 阅读 · 0 评论 -
多线程(八)CountDownLatch-倒计时锁
–CountDownLatch倒计时锁特别适合"总-分任务", 例如多线程计算后的数据汇总–CountDownLatch类位于Java.util.concurrent(J.U.C) 包下, 利用它可以实现类似计数器的功能, 比如有一个任务A, 它要等待其他3个任务执行完毕之后才能执行, 此时就可以利用CountDownLatch来实现这种功能了–示例代码package com.ygq.th...原创 2019-09-25 16:08:09 · 339 阅读 · 0 评论 -
多线程(七)并发工具包与线程池
目录--java.util.concurrent--new Thread的弊端--ThreadPool - 线程池--线程池的种类--CachedThreadPool() 可缓存线程池--定长线程池--SingleThreadExecutor() 单线程池--ScheduledExecutorService--线程池经典应用–java.util.concurrent–并发是伴随这多核处理...原创 2019-09-25 16:05:42 · 265 阅读 · 0 评论 -
多线程(六)线程安全
线程安全–在拥有共享数据的多条线程并行执行的程序中, 线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行, 不会出现数据污染等意外的情况–可以选择使用synchronized来保证线程安全线程安全与不安全的区别–线程安全:–优点: 可靠–缺点:执行速度慢–使用建议:需要线程共享时使用–线程不安全:– 优点: 速度快– 缺点: 可能与预期不符...原创 2019-09-25 15:59:46 · 185 阅读 · 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 · 657 阅读 · 0 评论 -
多线程(四)多线程的同步机制
为了避免在同一时刻对同一个资源有多个线程访问造成的不可预知问题, 所以采用线程的同步机制–代码中的同步机制–synchronized(同步锁)关键字的作用就是利用一个特定的对象设置一个锁lock, 在多线程并发访问的时候, 同事只允许一个线程, 可以获得这个锁, 执行特定的代码, 执行之后释放锁, 继续有其他线程争抢–Synchronize的使用场景–synchronized代码块 ...原创 2019-09-25 15:49:50 · 568 阅读 · 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 · 229 阅读 · 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 · 201 阅读 · 0 评论 -
多线程(一)基本概念
目录程序、进程、线程并发、并行同步、异步临界区死锁、饥饿、活锁线程安全程安全三大特性程序、进程、线程–程序: 静态的概念, windows下通常指的exe文件–进程: 动态的概念, 是程序在运行的状态, 进程说明程序在内存中的边界–线程: 是进程内的一个 “基本任务”, 每个线程都有自己的功能, 是CPU分配与调度的基本单位并发、并行同步、异步临界区临界区: 用来表...原创 2019-09-25 15:24:51 · 191 阅读 · 0 评论