关于等待状态的线程调用interrupt方法报异常:InterruptedException 当线程被阻塞,比如wait,join,sleep等,在调用interrupt方法,没有占用cpu运行的线程是不可能给自己的中断状态置位的,这就产生了InterruptedException异常. 一.闭锁CountDownLatch(允许一个或多个线程等待其它线程完成操作) 代码实例: package com.thread.ccse; import java.util.concurrent.CountD…
先来讲解一下Semaphore信号灯的作用:  可以维护当前访问自身的线程个数,并提供了同步机制, 使用semaphore可以控制同时访问资源的线程个数 例如,实现一个文件允许的并发访问数. 请看下面的演示代码: public class SemaphoreTest { public static void main(String[] args) { //创建一个带有缓存的线程池 ExecutorService service = Executors.newCachedThreadPool();…
在 java.util.concurrent 包中提供了 4 个有用的并发工具类 CountDownLatch 允许一个或多个线程等待其他线程完成操作,课题点 Thread 类的 join() 方法 CyclicBarrier 可以用于多线程计算数据,最后合并计算结果的场景 Semaphore 用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用公共资源 Exchanger 提供了在线程间交换数据的一种手段,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据 等待多线程…
1.CountDownLatch 允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助. A CountDownLatch用给定的计数初始化. await方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await 调用立即返回. 这是一个一次性的现象 - 计数无法重置. 如果您需要重置计数的版本,请考虑使用CyclicBarrier . public class CountDownLatchTest { public v…
Java并发 J.U.C图 一.线程的安全性 当多个线程访问某个类的时候,不管运行环境采用何种方式调度或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或者协同,这个类都可以表现出正确的行为,那么这个类就是线程安全的 无状态和竞态条件 无状态:不包含任何域,也不包含任何对其他对象中域的引用 竞态条件(Race Condition):并发编程中,不恰当的执行时序而出现不正确的结果 保证线程安全 复合操作原子性, "先检查,后执行"的延迟初始化:"读取-修改-写入&q…
分布式系统的基础知识 阿姆达尔定律 多线程交互模式 互不通信,没有交集,各自执行各自的任务和逻辑 基于共享容器(如队列)协同的多线程模式->生产者-消费者->队列 通过事件协同的多线程模式->如B线程需要等到某个状态或事件发生后才能继续工作,而这个状态改变或者事件产生和A线程相关 避免死锁 网络通信基础知识 OSI.TCP/IP 网络IO实现方式 BIO NIO->Reactor模式 AIO->Proactor模式 负载均衡 硬件负载均衡 LVS等软件的负载均衡 名称服务 规…
java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 singleton 不知道怎么操作,觉得意义不大 单例模式 私有化构造器不能实例化,也不可被子类继承 能用原生类的就尽量不用对象 []对于所有对象都通用的方法 reflexivity 自反性 symmetry 对称性 []类成员 降低可访问性 尽量把公有域 变成私有域,并提供 访问和修改的 get se…
synchronized,  lock/unlock,  volatile类型变量, atom类, 同步集合,  新类库中的构件: CountDownLatch\CyclicBarric\Semaphore\Exchanger, 免锁容器,乐观加锁, ReadWriteLock, 活动对象…
PART.1 无法中断的线程 一个无法中断的线程的例子. public class UninterruptableThread { @SuppressWarnings("deprecation") public static void main(String[] args) throws Exception { Thread th = new Thread(new TestRunnable()); // 启动线程 System.out.println("main: start…
上下文切换 死锁 volatile synchronized 原子操作 happens-before as-if serial 锁的内存 final 线程:daemon start suspend resume stop 线程之间的通信 Lock:队列同步器 AQS, 重入锁,读写锁 ,condition 并发容器:ConcurrentHashMap :segment ConcurrentLinkedQueue 阻塞队列:ArrayBlockedQueue Fork/Join 原子操作类:基本类…