
java多线程
台风天赋
Stay hungry;Stay foolish。Stay curiosity~
展开
-
java多线程——reentrantLock
ReentrantLock锁:通过AQS的学习得知,在java中,AQS是所有锁实现的基础,ReentrantLock也不例外。ReentrantLock继承自AQS类,并且有两个构造函数,一个有参数,一个五参数。默认无参数情况下创建的是一个非公平锁。在reentrantLock内部有一个sync变量,这个sync变量本身是AQS的子类型。在ReentrantLock内部并没有设置像state、Condition这些域,而是通过其内部的sync域来间接操作sync的state域来实现同步的功能。原创 2020-08-08 17:09:40 · 160 阅读 · 0 评论 -
java多线程——并发数据不一致java中的解决方案
多线程并发编程线程安全主要是由于多线程并发、同时操作共享变量导致的数据不一致。至于共享变量,需要涉及到计算机体系结构的内容:因为现代计算机都一般是设置了两级甚至三级cache。以两级cache为例:假设此时有两个CUP, 线程1 线程2 | | v v CUP1 CUP2 | | v v Cache1-1 Cache2-1 | ...原创 2020-08-08 17:08:10 · 4558 阅读 · 0 评论 -
java多线程——locksupport工具类
LockSupport工具类:是java中锁的基类。每一个线程都可与其建立许可联系。默认情况下,一个线程是没有LockSupport的许可证的。此时,如果调用LockSupport的静态方法park(),则当前线程会被挂起。当时如果当前线程有许可证,就会直接返回。当一个线程以线程1位参数调用unPark()方法时,会给线程1赋予许可证,并且如果线程1目前是处于因为park()而挂起的,则会被唤醒解除挂起。package LockSupport;/*name: demo01user: l原创 2020-08-08 16:58:19 · 154 阅读 · 0 评论 -
java多线程——java中进程与线程的操作、关系以及创建线程的三种方式
类似于操作系统中的概念,每个线程都是共享其隶属的进程空间,如堆、方法区,但是同时,每一个线程还是有一点属于自己的资源:程序计数器以及方法栈。在java的线程设计中,start方法只是使得线程处于就绪状态,只有当执行了run方法才获取cpu控制器、才处于真正的执行状态。但是一般来说,线程之间都是时间片调度,所以即使run(或者call)方法与start方法是绑定一起执行的,但是run方法一般都是滞后于start方法。java中的PV操作:最基本的是使用notify、synchronized以及原创 2020-08-08 16:57:11 · 173 阅读 · 0 评论 -
java多线程——concurrentLinkQueue
concurrentLinkedQueue是一种非阻塞队列,通过CAS保证其操作过程中的原子性,而又因为CAS本身为非阻塞式算法,因此该队列也为非阻塞式的。在该队列内部,每一个节点都一个Node类。同时,为了保持仅内存可见性,所以Node内部的域使用volatile修饰。最后,和一般的链表队列一样,该队列也有头指针和尾指针,同样也都是Node类型的。在操作时,如add(elem)操作:首先用哨兵记录头指针,再将头指针遍历到队列尾部,此时其指向null。然后,进行CAS操作:将头指针与nu.原创 2020-08-08 16:48:13 · 585 阅读 · 0 评论 -
java多线程——concurrentList
java中的List类型中,只有CopyOnWriteArrayList是线程安全的ArrayList。在copyOnWriteList中,基本底层还是不变:由数组构成的链表,有一个Object[]数组域。但是在其内部有一个ReentrantLock独占锁,在增删改的时候都是先上锁再操作。所以它是并发安全的。①在实现的时候,都是先先将数组域复制到一个新数组中,然后对这个新数组进行增删改,最后将新数组赋给旧数组。②在进行迭代iterator时,实际上是对内部数组域快照的一个迭代,如果这个数组域原创 2020-08-08 16:46:57 · 10058 阅读 · 0 评论 -
java多线程——AQS
AQS:抽象同步队列,这是所有锁实现的基础。该数据结构和操作系统中关于PV操作时的所需的数据结构一样。首先,其内部有一个状态变量state,用于记录当前的锁是否有线程在是否,并且还有一个Thread变量thread来记录当前使用该锁的线程本身。可以看出,如果该锁是独占锁,就可以通过state与thread变量的搭配使用达到锁的互斥使用以及锁的可重入性。同时,其内部还有几个Condition类型的变量,用于记录因为某个condition而阻塞的线程,此时这些线程都挂在相应的condition上。.原创 2020-08-08 16:45:35 · 147 阅读 · 0 评论