
并发编程
并发编程
naki_bb
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
并发安全
类的线程安全定义 如果多线程下使用这个类,不过多线程如何使用和调度这个类,这个类总是表示出正确的行为,这个类就是线程安全的。 类的线程安全表现为: 操作的原子性 内存的可见性 不做正确的同步,在多个线程之间共享状态的时候,就会出现线程不安全。 怎么才能做到类的线程安全? 栈封闭 所有的变量都是在方法内部声明的,这些变量都处于栈封闭状态。 无状态 没有任何成员变量的类,就叫做无状态的类 让类不可变 加final关键字,对于一个类,所有的成员变量应该是私有的,同样的只要有可能,所有的成员变原创 2020-06-03 17:49:45 · 226 阅读 · 0 评论 -
线程池
什么是线程池?为什么要用线程池? 降低资源的消耗。降低线程创建和销毁的资源消耗; 提高响应速度:线程的创建时间为T1,执行时间T2,销毁时间T3,免去T1和T3的时间 提高线程的可管理性。 JDK中的线程池和工作机制 线程池的创建 ThreadPoolExecutor,jdk所有线程池实现的父类 各个参数含义 int corePoolSize :线程池中核心线程数,< corePoolSize ,就会创建新线程,= corePoolSize ,这个任务就会保存到BlockingQu...原创 2020-06-02 17:30:59 · 164 阅读 · 0 评论 -
并发容器
ConcurrentHashMap Hashmap多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。 HashTable使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法,其他线程也访问HashTable的同步方法时,会进入阻塞或轮询状态。如线程1使用put进行元素添加,线程2不但不能使用put方法添加元素,.原创 2020-05-25 17:20:46 · 149 阅读 · 0 评论 -
AQS
什么是AQS AQS,指的是AbstractQueuedSynchronizer,它提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等并发类均是基于AQS来实现的。 AQS使用方式和其中的设计模式 继承,模板方法设计模式 独占式锁代表:ReentrantLock 共享式锁代表:ReadLock 模板方法: 独占式获取 accquire acquireInterruptib原创 2020-05-22 19:12:27 · 548 阅读 · 0 评论 -
显示锁Lock
Lock接口 主要方法: Lock与synchronized的比较 synchronized 代码简洁(关键字,是属于语言层面实现同步) Lock:获取锁可以被中断,超时获取锁,尝试获取锁,读多写少用读写锁(是JDK提供的一个类,来实现同步) 可重入锁ReentrantLock public class LockDemo { static Lock lock = new ReentrantLock(); static int count; public void .原创 2020-05-20 18:42:00 · 200 阅读 · 0 评论 -
CAS 原子操作(Atomic)
CAS 原子操作: 不可分割的操作 CAS 原理 CAS(Compare And Swap),指令级别保证这是一个原子操作 三个运算符: 一个内存地址V,一个期望的值A,一个新值B 基本思路:如果地址V上的值和期望的值A相等,就给地址V赋给新值B,如果不是,不做任何操作。 循环(死循环,自旋)里不断的进行CAS操作 CAS存在的问题 ABA问题: 同时有2个线程获取当前变量值,均为A,当第一个线程对该变量进行2次操作A->B->A.此时对于另外一个线程表现出的现象为此值并..原创 2020-05-20 16:32:33 · 526 阅读 · 0 评论 -
Java多线程并发工具类
CountDownLauch 作用:是一组线程等待其他的线程完成工作以后在执行,加强版join await用来等待,countDown负责计数器的减一 countDownLauch设定的次数必须减少到0,await的方法才会被唤醒向下继续执行,否则当一直处于阻塞状态 public class CountDownLatchDemo { static CountDownLatch countDownLatch = new CountDownLatch(5); private stat原创 2020-05-14 19:25:19 · 588 阅读 · 0 评论 -
Fork / Join 框架
Fork-Join框架的用途: 将一个庞大的任务,拆分成多个互不相关的子任务,分别执行,并汇总结果,得到最终结果。 什么是分而治之? 规模为N的问题,N<阈值,直接解决,N>阈值,将N分解为K个小规模子问题,子问题互相对立,与原问题形式相同,将子问题的解合并得到原问题的解。 有3个父类: RecursiveTask (有返回值的任务父类) RecursiveAction (无返回值任务的父类) ForkJoinTask(1,2的父类) 示例: 求解一个Int数组的和: ..原创 2020-05-13 18:25:08 · 165 阅读 · 0 评论 -
Java 多线程
Java创建线程的3种方式 extends Thread implements Runnable implements Callable<> private static class UserThread extends Thread{ @Override public void run() { System.out.println("this is UserThread"); ...原创 2020-05-13 16:28:38 · 148 阅读 · 0 评论