
java并发
A-xun
这个作者很懒,什么都没留下…
展开
-
Java并发 - Future
Future代表了异步计算的结果。内含一些方法,可以检查任务是否完成,获取任务执行结果,并且可以取消任务。isDone() 检查任务是否已经完成get() 获取任务结果,若任务未完成则阻塞get(long timeout, TimeUnit unit) 带有时限的等待cancel(boolean mayInterruptIfRunning) 取消任务isCancelled() 是否已被取消Future的设计是自相矛盾的。它本来代表异步计算的结果,但是get()又是阻塞的。相当于使用get()原创 2020-07-29 19:03:30 · 248 阅读 · 0 评论 -
JUC - Semaphore应用与源码解析
Semaphore,信号量通常用于限流。简单使用 public static void main(String[] args){ Semaphore s = new Semaphore(3, true); for(int i = 1; i <= 10; i++){ new Thread(() -> { try { s.acquire(); .原创 2020-07-23 19:28:47 · 172 阅读 · 0 评论 -
ThreadLocal源码解析及避坑指南
ThreadLocal 是线程私有领地,其他线程无法访问。本文首先给出一个简单的使用示例,接下来主要解析ThreadLocal的原理,继而探索可能出现的内存泄漏。一个小栗子public static void main(String[] args) { final ThreadLocal<String> tl = new ThreadLocal<>(); tl.set("ThreadLocal Test"); new Thread(() -> .原创 2020-07-20 13:05:41 · 289 阅读 · 0 评论 -
线程池(一)Java线程与OS进程
本文主要以实战的方式,探索Java语言中的Thread与OS中进程(线程)的关系,探索OS创建线程的细节,并总结其中的资源消耗。通过这个过程,你就知道为什么要使用线程池。随处可见的论调在生产环境中,为每个任务分配一个线程的做法存在一些缺陷,尤其当并发量很高的时候。创建和销毁线程的代价相当高。活跃的线程会消耗系统资源,尤其是内存。稳定性难以保证。可创建线程的数量受多个条件限制,包括JVM的启动参数、Thread构造函数中请求的栈大小以及底层操作系统的限制。基于此,线程池的优势就体现出来了.原创 2020-07-03 13:30:02 · 760 阅读 · 0 评论 -
java并发编程之 Lock的优势
本文导论:JDK1.5 中新增了Lock接口及其一众实现类,作者是大神 Doug Lea。Lock是一种在多线程环境下控制访问共享资源的工具。在此之前,已经有关键字synchronized用于同步,那么为什么还需要再造一个新的同步工具呢?Lock相比synchronized有什么优势?...原创 2020-06-30 15:12:43 · 381 阅读 · 0 评论 -
java 同步工具类
CountDownLatchCountDownLatch可以用来保证,一个或者多个线程在某些其他线程的操作执行完毕后再开始执行。初始化时指定一个count,程序会在await()方法的掉用处阻塞,每次调用countDown()会使得count减一,当count等于0,await后面的线程将得以执行。值得一提的是,count的值不能重置。注意,count的值被置为N,只要通过countDown(...原创 2019-11-26 23:59:20 · 169 阅读 · 0 评论 -
syncronized关键字详解
java中的关键字syncronized,具有以下特点:可以修饰方法或者一个代码块,属于悲观锁的一种。修饰静态方法时,加锁对象是类的Class对象,修饰非静态方法或者代码块时,锁住的是调用该方法的当前对象。可以保证原子性,可见性,可以保证原子性,可见性,不能保证有序性,即它所修饰的方法或者代码块内部的指令,是可以被jvm重排序的,这也是为什么双重检查模型需要用volatile来修饰变量的...原创 2019-11-26 11:20:37 · 245 阅读 · 0 评论 -
由AtomicInteger开始讲CAS
AtomicInteger底层依赖于Unsafe类,基于CAS(compare and swap)原理,可以保证更新一个Integer变量的原子性。AtomicInteger主要的三个成员变量如下。U是Unsafe类的一个实例,其中包含了一些用于操作底层的非安全的方法,虽然这些方法都是public,但是不应该随便使用,因为unsafe。VALUE代表了AtomicInteger.clas...原创 2019-11-12 19:52:29 · 187 阅读 · 0 评论