JUC并发包笔记
tribbleofjim
这个作者很懒,什么都没留下…
展开
-
synchronized专场
synchronized和lock都是java中常用的同步机制。但不得不说,JDK官方爸爸对于synchronized这个小儿子的偏爱明显超过了lock——即使我们说synchronized会笨重,会产生上下文切换的线程开销,但JDK为了解决这个问题给它专门做了一系列的优化,目前的主流也是使用synchronized进行同步。synchronized和lock的区别我们这里说的lock,大体上...原创 2020-03-04 20:21:11 · 92 阅读 · 0 评论 -
java内存模型与线程
这一篇和接下来我将要写的一篇文章都是java并发相关,但并不完全是JUC包中的内容了。实际上,它们都可算作是《深入理解jvm虚拟机》这本书中“高效并发”这一部分的笔记。它们从一个更加深入的角度理解线程和进程,原书非常非常地经典,值得仔仔细细反复研读。硬件层面的一致性与java内存模型回想一下我们学过的操作系统,和java内存模型,就会发现二者其实几乎是相同的。在硬件层面,多路处理器系统中,每个...原创 2020-03-02 11:12:27 · 113 阅读 · 0 评论 -
java中集合及字符串的线程安全问题汇总
这其实不完全属于JUC的内容,但是见到了好多集合类线程安全的问题,就汇总一下。数组ArrayList:非线程安全LinkedList:非线程安全众所周知,ArrayList不是线程安全的,LinkedList也不是。它们的代码中没有任何同步的手段,一旦在多线程环境下,就很容易出现问题。Vector:线程安全线程安全的数组类是Vector,为了线程安全,它几乎给所有的方法都加上了sync...原创 2020-03-01 19:17:39 · 355 阅读 · 0 评论 -
JUC中几种锁的原理剖析
LockSupport工具类底层是Unsafe类实现的,主要作用是挂起(park()方法)和唤醒(unpark()方法)线程,看起来和wait()与notify()差不多,不过还有一些区别:park()不需要获取对象的锁。LockSupport类与每个使用它的线程都会关联一个许可证。默认情况下,调用LockSupport类的方法的线程是不持有许可证的,这也就导致直接调用park()方法的线程会...原创 2020-03-01 17:42:44 · 684 阅读 · 0 评论 -
java并发编程的其他基础知识
多线程并发编程的概念并发和并行:并发是指同一个时间段内多个任务同时都在执行,并且都没有执行结束,而并行是说单位时间内多个任务同时再执行。举个栗子,一个CPU只能通过时间片轮转之类的线程调度算法做到并发,而无法做到并行。相反,如果有多个CPU且同时执行不同的线程任务,这个就叫做并行。在多线程编程实践中,线程的个数往往多于CPU的个数, 所以一般都说多线程并发编程而非多线程并行编程。java中共...原创 2020-02-28 11:20:32 · 84 阅读 · 0 评论 -
java三个线程同步器的用法与源码解析
三种同步器的功能本文主要介绍三个线程同步器,它们的功能分别是:CountDownLatch:确保所有子线程执行完成以后再执行汇总, 内部有一个计数器,一个子线程执行完就倒数一下,倒数完后返回;CyclicBarrier:让一组线程全部达到一个状态以后再全部同时执行, 当所有线程执行完毕以后,重置CyclicBarrier的状态之后还可以被重用;Semaphore:大家都很熟悉的信号量,内...原创 2020-02-24 20:37:11 · 235 阅读 · 0 评论 -
java线程池的基础知识及源码解析
java线程池的相关知识基础知识线程池主要是ThreadPoolExecutor这个类。Excutor其实是个工具类,里面提供了一系列的静态方法,根据用户选择返回不同的线程池实例。ThreadPoolExecutor类继承了AbstractExecutorService,成员变量ctl用来记录线程池状态和池中线程个数,一个变量记录两个信息。//高3位用来表示线程池状态,低29位用来表示线程个...原创 2020-02-23 18:34:15 · 116 阅读 · 0 评论 -
一些线程相关的函数
与线程相关的一些函数Object类自带函数java把一些关于线程通知和等待的函数放到了Object类里面。也就是说任意一个对象都拥有这些函数。wait()函数:1、阻塞挂起调用线程;2、释放该线程在该共享变量上获取的监视器锁。(如果该线程还有其他共享变量的锁,这些锁是不会被释放的)如果该线程之前没拿到监视器锁怎么办呢?这个时候就会抛出IllegalMonitorStateExcepti...原创 2020-02-14 16:09:22 · 141 阅读 · 0 评论 -
java中创建线程的三种方式
java中线程创建的三种方式什么是线程进程:一段代码在特定数据集合上的一次运行活动,操作系统资源分配的基本单位。(换了个数据集合或者换了代码都不算是同一个进程)线程:是进程中的一个实体,本身是不会独立存在的。是进程的一个执行路径,一个进程中至少有一个线程,进程的多个线程共享进程的资源。任务调度和执行的基本单位。操作系统中大概是这样的:在JVM中,这个图可以再细化一下,大概是这样的:...原创 2020-02-14 12:17:16 · 120 阅读 · 0 评论