Java多线程
Jacob Lee
学而时习之,不亦说乎?
展开
-
condition的应用举例
题目描述:多线程之间按顺序调用,实现 A-> B -> C 三个线程启动,要求如下:A打印3次,B打印5次,C打印7次紧接着A打印3次,B打印5次,C打印7次…来3轮解决办法:ReentrantLock+Conditionimport java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLoc原创 2020-08-06 15:45:43 · 200 阅读 · 0 评论 -
生产者消费者模式
import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;//资源类class ShareData{ private int number=0; private Lock lock=new ReentrantLock(); private Condition conditi原创 2020-08-06 14:17:03 · 89 阅读 · 0 评论 -
阻塞队列
Queue接口在Queue接口中,除了继承Collection接口中定义的方法外,它还分别额外地定义插入、删除、查询这3个操作,其中每一个操作都以两种不同的形式存在,每一种形式都对应着一个方法。add方法在将一个元素插入到队列的尾部时,如果出现队列已经满了,那么就会抛出IllegalStateException,而使用offer方法时,如果队列满了,则添加失败,返回false,但并不会引发异常。remove方法是获取队列的头部元素并且删除,如果当队列为空时,那么就会抛出NoSuchElementE原创 2020-08-06 11:16:05 · 245 阅读 · 0 评论 -
基于AQS的应用
ReentrantLock//继承于AQSpublic class ReentrantLock implements Lock, java.io.Serializable { private static final long serialVersionUID = 7373984872572414699L; /** Synchronizer providing all implementation mechanics */ private final Sync sync;原创 2020-08-05 16:38:18 · 245 阅读 · 0 评论 -
好好理解下ReentrantReadWriteLock
public class ReentrantReadWriteLock implements ReadWriteLock, java.io.Serializable { private static final long serialVersionUID = -6992448646407690164L; /** 内部类提供读锁 */ private final ReentrantReadWriteLock.ReadLock readerLock; /** 内部原创 2020-08-05 14:58:09 · 104 阅读 · 0 评论 -
简单聊聊AQS
概述AQS核⼼思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的⼯作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占⽤,那么就需要⼀套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是⽤CLH队列锁实现的,即将暂时获取不到锁的线程加⼊到队列中。CLH(Craig,Landin,and Hagersten)队列是⼀个虚拟的双向队列(虚拟的双向队列即不存在队列实例,仅存在结点之间的关联关系)。AQS是将每条请求共享资源的线程封装成⼀个CLH锁队列的⼀个结点(Node)来实现原创 2020-08-05 14:40:56 · 222 阅读 · 0 评论 -
不安全集合类
视频学习地址:尚硅谷Java大厂面试题第二季(java面试必学,周阳主讲)集合类不安全之ListArrayList线程不安全举例:public class test02 { public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i = 0; i < 30; i++) { new原创 2020-08-05 11:07:15 · 163 阅读 · 0 评论 -
四种线程池类
Java中四种具有不同功能常见的线程池。他们都是直接或者间接配置ThreadPoolExecutor来实现他们各自的功能。这四种线程池分别是newFixedThreadPool,newCachedThreadPool,newScheduledThreadPool和newSingleThreadExecutor。这四个线程池可以通过Executors类获取。newFixedThreadPool通过Executors中的newFixedThreadPool方法来创建,该线程池是一种线程数量固定的线程池。原创 2020-08-04 21:44:47 · 653 阅读 · 0 评论 -
CAS底层原理
视频学习地址:尚硅谷Java大厂面试题第二季(java面试必学,周阳主讲)概念CAS的全称是Compare-And-Swap,它是CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。import java.util.concurrent.atomic.AtomicInteger;public class CASTest { public static void main(String[] args) { AtomicInte原创 2020-08-04 14:48:24 · 207 阅读 · 0 评论 -
Volatile详解
视频学习地址:尚硅谷Java大厂面试题第二季(java面试必学,周阳主讲)谈谈对Volatile的理解Volatile在日常的单线程环境是应用不到的Volatile是Java虚拟机提供的轻量级的同步机制(三大特性)保证可见性不保证原子性禁止指令重排JMMJMM是Java内存模型,也就是Java Memory Model,简称JMM,本身是一种抽象的概念,实际上并不存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。J原创 2020-08-04 10:40:30 · 443 阅读 · 0 评论