Java并发
oldGarlic
看看世界有多大!!!
展开
-
Java集合:Set
Set集合,我们常见的Set有HashSet,TreeSet,LinkedHashSet,我们先来看下HashSet。一、HashSet成员变量: 成员变量只有可怜的两个,一个是装数据的容器,一个类似于标记 private transient HashMap<E,Object> map; private static final Object PRESENT = new Object();数据操作方法: 我们从添加/移除方法可以看出HashMap是以(Key,value原创 2020-09-02 23:01:50 · 102 阅读 · 0 评论 -
Java并发:线程池
线程目的线程复用,线程的创建与销毁是很消耗资源的。防止出现OOMThreadPoolExecutor直接来看下构造方法,不过一般构造线程池会用Executors这个工具类,且常用的方法有三个,有兴趣可以去看看,就直接上个最长的构造器。 // 可自定义扩展线程池 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,原创 2020-08-30 16:28:49 · 156 阅读 · 0 评论 -
Java并发:Condition
Condition使用案例:消费模型public class ConditionTest { public static ReentrantLock lock = new ReentrantLock(); public static Condition notEmpty = lock.newCondition(); public static Condition notFull = lock.newCondition(); public static PriorityQue原创 2020-08-27 22:39:18 · 128 阅读 · 0 评论 -
Java并发:AbstractQueuedSynchronizer
AbstractQueuedSynchronizer:抽象同步队列,简称AQS,它是实现同步器的基础组件,并发包中的锁的底层就是使用AQS实现的。开始正题:成员变量: //队列头结点 private transient volatile Node head; //队列尾节点 private transient volatile Node tail; // 同步器的状态,例如ReentrantLock用作锁是否被占用,锁重入的次数 // CountDownLatc原创 2020-08-26 21:18:00 · 113 阅读 · 0 评论 -
Java并发:ThreadLocal
本文章在于简要介绍ThreadLocal的作用要点一: ThreadLocal类内部存在ThreadLocalMap静态内部类,ThreadLocalMap本质上为定制化的HashMap。要点二: Thread类存在两个ThreadLocalMap类型的变量,threadLocals 和inheritableThreadLocals ,默认值为nullpublicclass Thread implements Runnable { ThreadLocal.ThreadLocalMap thr原创 2020-06-28 14:56:53 · 230 阅读 · 0 评论 -
Java并发:ThreadLocalRandom
讲ThreadLocalRandom之前,需要了解一下Random类的用法及其原理。一:Random使用方法: 下例子为循环输出10次0~9之间的数值。public class RandomTest { public static void main(String[] args) { Random random = new Random(); for ...原创 2019-05-25 22:38:51 · 1427 阅读 · 0 评论 -
Java并发:并发基础(一)
一:线程与进程进程:一个系统至少拥有一个进程,是系统调度和分配志愿的基本单位。线程:每个线程只有拥有一个线程,线程依附进行进程存在,是真正操作数据的单元。JVM内存:虚拟机内存结构分为堆,栈,方法区,程序计数器。堆:所有线程共享,存储对象的数据。方法区:所有线程共享,存储静态变量,常量,JVM加载的类等。栈:线程私有,存储局部变量及栈帧。程序计数器:线程私有,用于记录线程的运行进程。...原创 2019-05-15 22:30:23 · 121 阅读 · 0 评论 -
Java并发:并发基础(二)
一:并发与并行并发: 在同一时间段内多个任务同时在执行,并且没有执行结束。CPU是通过时间片的方式来进行控制线程的运行,单位时间内只有一个线程在运行,其他线程都处于挂起状态,线程轮流获得CPU的使用权限。并行: 在单位时间内多个任务同时执行。一个任务分为多段,交由不同的CPU同时执行....原创 2019-05-20 23:54:59 · 114 阅读 · 0 评论 -
Java源码:Reference与ReferenceQueue
一:ReferenceReference的四种状态Active:活跃,内存一开始分配的常有状态,垃圾收集器进行可达性分析后会进入Pending或Inactive状态,取决于已经注册到一个队列。Pending:待定,进行回收时,会先进入pending-Reference队列,等待着Reference-handler线程来取走入队。Enqueued:入队,内存已回收的对象,若从队列中删除...原创 2019-05-13 22:45:28 · 170 阅读 · 0 评论 -
Java并发-CountDownLatch、CyclicBarrier和Semaphore
在JDK1.5中提供了高级同步对象来进行开发效率的提高,例如CountDownLatch,CyclicBarrier和Semaphore,下面就来看一下这三个类的用法。1.SemaphoreSemaphore,中文名信号量,Semaphore可以控制访问该资源的线程数量。通过构造方法来申明所拥有的资源额个数。 public Semaphore(int permits) { ...原创 2018-12-18 21:08:06 · 129 阅读 · 0 评论 -
Java并发-原子类atomic
1.非阻塞方式原子操作原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何线程的切换。每个线程都会具有各自的工作内存,Java中所有变量都会存储在主内存中,线程的工作内存都是主内存中变量的副本。线程在各自的工作内存中进行变量的操作后,后再将变量传回主内存,线程之间无法进行直接通信,线程间的变量传递都需要通过主内存来完成。java内存模型定义了8种...原创 2018-12-17 22:01:13 · 157 阅读 · 0 评论 -
Java并发-synchronized和Lock的区别
1. 同步的方式总所周知,我们平常所用的同步方式:① synchronized关键字 ② Lock这是一段未被同步的代码,i的值一般不会为10000。这是因为每段线程的都有各自的工作的内存,并且i++不是为原子操作,它们修改i的值的步骤分为三步:读入数据,修改,写入主内存。它们也并不会是井井有序的一个一个的来,而是一拥而上,多个线程读取可以为同一个数值,这样会造成该线程做无用功。So,我们的方...原创 2018-12-17 21:01:07 · 192 阅读 · 0 评论 -
Java并发-多线程
1.多线程线程状态每个线程可以看做不同的任务,cpu需要分配每个线程不同的使用时间,cpu需要不同的线程之间来回切换,造成线程可能存在的不同状态。新建线程继承Thread,重写run方法,new Thread来进行新建线程。实现Runnable,重写run方法,new Thread(new Runnanle())来进行构造public class Thread1 exte...原创 2018-12-08 23:01:52 · 114 阅读 · 0 评论