
并发
文章平均质量分 53
赵银龙
这个作者很懒,什么都没留下…
展开
-
Fork/Join框架
今天第一次听到Fork/Join框架,感觉自己low爆了,连这个都不知道,所以回来就抓紧补知识,我们先看一下别人对这个框架的原理的介绍Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork/Join框架要完成两件事情:1.任务分割:首先Fork/Join框架需要把大的任务分割成足够小的子任...原创 2018-10-11 22:24:03 · 120 阅读 · 0 评论 -
分布式锁实现之redis
利用redis设计分布式锁主要用下面这三个命令:SETNX:SETNX key val当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。expireexpire key timeout为key设置一个超时时间,单位为second,超过这个时间锁会自动释放,避免死锁。deletedelete key删除key原理:获取锁的时候...原创 2018-10-23 17:53:20 · 96 阅读 · 0 评论 -
分布式锁实现之Zookeeper之自己封装
我们前面介绍了Zookeeper实现分布式锁的原理,也看了官方是如何实现的,那么我们就按照这个思路来自己实现,我们主要用到了CountDownLatch来实现监听器的功能,当一个节点被删除之后,他们让它后面的那个节点的计数减一,达到通知的功能:private ZooKeeper zk = null; // 根节点 private String ROOT_LOCK = "/locks";...原创 2018-10-23 17:42:19 · 264 阅读 · 0 评论 -
分布式锁实现之Zookeeper源码解析
public static void main(String[] args) throws Exception { //创建zookeeper的客户端 RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); CuratorFramework client = CuratorFrameworkFactory.new...原创 2018-10-23 17:03:41 · 498 阅读 · 0 评论 -
分布式锁实现之Zookeeper原理简介
实现分布式锁目前有三种流行方案,分别为基于数据库、Redis、Zookeeper的方案。我们来看下使用Zookeeper如何实现分布式锁。什么是Zookeeper?Zookeeper(业界简称zk)是一种提供配置管理、分布式协同以及命名的中心化服务,这些提供的功能都是分布式系统中非常底层且必不可少的基本功能,但是如果自己实现这些功能而且要达到高吞吐、低延迟同时还要保持一致性和可用性,实际上非常...转载 2018-10-23 13:43:25 · 113 阅读 · 0 评论 -
Condition的实现原理
我们在使用synchronized进行同步的是否,如果一个线程获得了一个对象的锁,而这个线程需要在执行的过程中挂起,那么我们就可以调用这个对象的wait方法,释放锁的资源,挂起,等待被唤醒重新获得锁的资源,而我们如果用可重入锁来进行同步,想选择挂起应该怎么做呢,Lock中引入了Condition这个类来做这件事,接下来我们就看一下它是怎么实现的:LinkedBlockingQueue<St...原创 2018-10-13 13:39:34 · 540 阅读 · 0 评论 -
CyclicBarrier的实现
我们看下面的这段代码:CyclicBarrier barrier = new CyclicBarrier(2); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); barrier.await(); System.out...原创 2018-10-13 12:31:26 · 163 阅读 · 0 评论 -
CountDownLatch的实现
这是一个非常有意思的类,看下面的代码:CountDownLatch countDownLatch = new CountDownLatch(1); new Thread(new Runnable() { @Override public void run() { try { long startTime = System.currentTimeMilli...原创 2018-10-12 22:47:46 · 1531 阅读 · 0 评论 -
信号量Semaphore的实现
这节我们来看一下信号量的实现方式,下面是我们本次的入口代码,我们先看一下非公平的方式是怎么做的:Semaphore semaphore = new Semaphore(1);semaphore.acquire(1);semaphore.release(1);首先来看一下它的构造方法:public Semaphore(int permits) { sync = new N...原创 2018-10-12 21:46:07 · 478 阅读 · 0 评论 -
可重入锁的实现
之前我们介绍了AQS的基本原理,从本节开始,我们就要分析各种实现了,本章就先分析可重入锁中的非公平锁的实现:ReentrantLock lock = new ReentrantLock();lock.lock();lock.unlock();这是我们的入口:final void lock() { //通过CAS操作获得资源 if (compareAndSe...原创 2018-10-12 16:38:45 · 644 阅读 · 0 评论 -
AQS框架基本流程
我们先来看一下这个并发框架的原理,在之后的文章中我们将一个一个的分析那些有用的实现。public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) selfInter...原创 2018-10-12 15:44:49 · 790 阅读 · 0 评论 -
java线程池
我们以固定大小的线程池为例来进行分析:public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLIS...原创 2018-10-12 14:19:09 · 113 阅读 · 0 评论 -
ThreadLocal源码解析
ThreadLocal是线程的一个本地化对象,或者说是局部变量。当工作于多线程中的对象使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程分配一个独立的变量副本。所以每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本。ThreadLocal不是用来解决对象共享访问问题的,而主要是提供了线程保持对象的方法和避免参数传递的方便的对象访问方式Threa...原创 2018-10-23 22:17:22 · 112 阅读 · 0 评论