
并发编程
并发编程
naki_bb
这个作者很懒,什么都没留下…
展开
-
并发安全
类的线程安全定义如果多线程下使用这个类,不过多线程如何使用和调度这个类,这个类总是表示出正确的行为,这个类就是线程安全的。类的线程安全表现为:操作的原子性 内存的可见性不做正确的同步,在多个线程之间共享状态的时候,就会出现线程不安全。怎么才能做到类的线程安全?栈封闭所有的变量都是在方法内部声明的,这些变量都处于栈封闭状态。无状态没有任何成员变量的类,就叫做无状态的类让类不可变加final关键字,对于一个类,所有的成员变量应该是私有的,同样的只要有可能,所有的成员变原创 2020-06-03 17:49:45 · 209 阅读 · 0 评论 -
线程池
什么是线程池?为什么要用线程池?降低资源的消耗。降低线程创建和销毁的资源消耗; 提高响应速度:线程的创建时间为T1,执行时间T2,销毁时间T3,免去T1和T3的时间 提高线程的可管理性。JDK中的线程池和工作机制线程池的创建ThreadPoolExecutor,jdk所有线程池实现的父类各个参数含义int corePoolSize :线程池中核心线程数,< corePoolSize ,就会创建新线程,= corePoolSize ,这个任务就会保存到BlockingQu...原创 2020-06-02 17:30:59 · 153 阅读 · 0 评论 -
并发容器
ConcurrentHashMapHashmap多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。HashTable使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法,其他线程也访问HashTable的同步方法时,会进入阻塞或轮询状态。如线程1使用put进行元素添加,线程2不但不能使用put方法添加元素,.原创 2020-05-25 17:20:46 · 143 阅读 · 0 评论 -
AQS
什么是AQSAQS,指的是AbstractQueuedSynchronizer,它提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等并发类均是基于AQS来实现的。AQS使用方式和其中的设计模式继承,模板方法设计模式独占式锁代表:ReentrantLock共享式锁代表:ReadLock模板方法:独占式获取accquireacquireInterruptib原创 2020-05-22 19:12:27 · 530 阅读 · 0 评论 -
显示锁Lock
Lock接口主要方法:Lock与synchronized的比较synchronized 代码简洁(关键字,是属于语言层面实现同步)Lock:获取锁可以被中断,超时获取锁,尝试获取锁,读多写少用读写锁(是JDK提供的一个类,来实现同步)可重入锁ReentrantLockpublic class LockDemo { static Lock lock = new ReentrantLock(); static int count; public void .原创 2020-05-20 18:42:00 · 190 阅读 · 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 · 484 阅读 · 0 评论 -
Java多线程并发工具类
CountDownLauch作用:是一组线程等待其他的线程完成工作以后在执行,加强版joinawait用来等待,countDown负责计数器的减一countDownLauch设定的次数必须减少到0,await的方法才会被唤醒向下继续执行,否则当一直处于阻塞状态public class CountDownLatchDemo { static CountDownLatch countDownLatch = new CountDownLatch(5); private stat原创 2020-05-14 19:25:19 · 572 阅读 · 0 评论 -
Fork / Join 框架
Fork-Join框架的用途:将一个庞大的任务,拆分成多个互不相关的子任务,分别执行,并汇总结果,得到最终结果。什么是分而治之?规模为N的问题,N<阈值,直接解决,N>阈值,将N分解为K个小规模子问题,子问题互相对立,与原问题形式相同,将子问题的解合并得到原问题的解。有3个父类:RecursiveTask (有返回值的任务父类) RecursiveAction (无返回值任务的父类) ForkJoinTask(1,2的父类)示例:求解一个Int数组的和:..原创 2020-05-13 18:25:08 · 157 阅读 · 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 · 131 阅读 · 0 评论