JUC之Exchanger

2019-03-06

JUC中的Exchanger允许成对的线程在指定的同步点上通过exchange方法来交换数据。如果第一个线程先执行exchange方法,它会一直等待第二个线程也 执行exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将当前线程生产 出来的数据传递给对方。

Read More »


JUC之CyclicBarrier

2019-03-03

CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。

Read More »

JUC之CountDownLatch

2019-02-28

CountDownLatch允许一个或多个线程等待其他线程完成操作。定义CountDownLatch的时候,需要传入一个正数来初始化计数器(虽然传入0也可以,但这样的话CountDownLatch没什么实际意义)。其countDown方法用于递减计数器,await方法会使当前线程阻塞,直到计数器递减为0。所以CountDownLatch常用于多个线程之间的协调工作。

Read More »


Java 内存模型

2019-02-25

理解Java内存模型是深入学习Java并发不可或缺的部分。Java内存模型即Java Memory Model,简称为JMM,定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。

JMM规定Java线程间的通信采用共享内存的方式。在Java中,所有成员变量、静态变量和数组元素都存储在堆内存中,堆内存在线程之间共享,所以它们通常也称为共享变量。JMM定义了线程和主内存之间的抽 象关系:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory,或者也可以称为工作内存 Work Memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化。

Read More »

Guava 杂项笔记

2019-01-18

这里主要记录Guava提供的一些工具类的用法。

Strings

空和null相互转换:

1
2
3
4
String s1 = Strings.emptyToNull("");
System.out.println(s1); // null
String s2 = Strings.nullToEmpty(null);
System.out.println(s2); //

Read More »

NIO2接口方法

2019-01-15

JDK7对NIO进行了极大的扩展,增强了对文件处理和文件系统特性的支持,以至于我们称他们为 NIO.2。因为NIO 提供的一些功能,NIO已经成为文件处理中越来越重要的部分。

Read More »


Guava RateLimiter

2019-01-15

Google Guava提供的RateLimiter使用的是令牌桶算法。令牌桶算法的基本思想是以固定的速率生成令牌,在执行请求之前都需要从令牌桶里获取足够的令牌。当令牌数量不足的时候,请求将被阻塞进入等待状态或者直接返回失败。RateLimiter常用于限制访问资源的速率。

Read More »


Guava 缓存

2019-01-07

Guava缓存是轻量级的,它将内容缓存到运行内存中。如果系统中某些值(比如一些配置表)被频繁查询使用,并且我们愿意消耗一些内存空间来提升应用的速度,减轻数据库压力的话,Guava缓存将会是一个不错的选择。由于缓存是存储在运行内存中的,所以我们需要确保缓存的大小不超出内存的容量。

Read More »


1…101112…45
Hosted  by  Coding Pages
MrBird
MrBird

A simple blog, code repository, just keep blogging

14 Archives 2 Labels
  • 🏠 Home
  • 📦 Archives
  • 🔖 Labels
  • 👬 Friends
  • 🔍 Search
  •   UV    PV 
    0