JAVA---并发编程
文章平均质量分 93
JAVA---并发编程
Promise_J_Z
简单生活
展开
-
JUC并发编程--------AQS以及各类锁
从源码上可以看到,当线程调用lock的时候,进来这个方法,前驱节点都是0,然后设置完前驱节点的状态为-1之后,会返回一个false,在外层又会进行一次自旋,如果前驱节点是头节点,则可以尝试通过cas尝试获取锁,当获取锁失败再次进来的时候,通过 if (ws == Node.SIGNAL)判断成功,直接返回ture,表示需要中断。首先进来会先判断前驱节点的状态,默认都是0,而该方法的目的就是要即将前驱节点状态设置成-1,在-1状态下,如果前驱节点释放锁,就会激活该节点,然后重新尝试获取锁。原创 2023-10-11 23:44:27 · 173 阅读 · 0 评论 -
JUC----ThreadLocal
这样一来,ThreadLocalMap中就会出现key为null的Entry,就没有办法访问这些key为null的Entry的value,如果当前线程再迟迟不结束的话,这些key为null的Entry的value就会一直存在一条强引用链:Thread Ref -> Thread -> ThreaLocalMap -> Entry -> value,而这块value永远不会被访问到了,所以存在着内存泄露。将当前线程局部变量的值删除,目的是为了减少内存的占用,该方法是JDK 5.0新增的方法。原创 2023-05-08 23:09:44 · 796 阅读 · 0 评论 -
JUC并发编程--------线程安全篇
简单的说就是局部变量。因为多线程下的使用,固然user这个对象的实例会不正常,但是对于StatelessClass这个类的对象实例来说,它并不持有UserVo的对象实例,它自己并不会有问题,有问题的是UserVo这个类,而非StatelessClass本身。让状态不可变,加final关键字,对于一个类,所有的成员变量应该是私有的,同样的只要有可能,所有的成员变量应该加上final关键字,但是加上final,要注意如果成员变量又是一个对象时,这个对象所对应的类也要是不可变,才能保证整个类是不可变的。原创 2023-09-11 23:49:13 · 782 阅读 · 0 评论 -
JUC并发编程--------基础篇
counter 就好比背包中的备用干粮(0 为耗尽,1 为充足) 调用 park 就是要看需不需要停下来歇息 ,如果备用干粮耗尽,那么钻进帐篷歇息 ,如果备用干粮充足,那么不需停留,继续前进 ,调用 unpark,就好比令干粮充足 ,如果这时线程还在帐篷,就唤醒让他继续前进,如果这时线程还在运行,那么下次他调用 park 时,仅是消耗掉备用干粮,不需停留继续前进,因为背包空间有限,多次调用 unpark 仅会补充一份备用干粮。从数据来说,以程序员的角度来看, 是方法调用过程中的各种局部的变量与资源;原创 2023-09-03 11:40:08 · 884 阅读 · 0 评论 -
JUC并发编程--------线程池
线程池基本概念Executors提供的几种线程池源码解析execut方法addworker方法runworker方法getTask方法processWorkerExit方法一、newCachedThreadPool二、newFixedThreadPool三、newSingleThreadExecutor四、newScheduledThreadPool原创 2022-08-26 15:47:20 · 503 阅读 · 0 评论 -
多线程面试题
CountDownLatch和Semaphore的区别和底层原理ReentrantLock中tryLock()和lock()⽅法的区别ReentrantLock中的公平锁和⾮公平锁的底层实现sleep()、wait()、join()、yield()的区别Sychronized的偏向锁、轻量级锁、重量级锁Sychronized和ReentrantLock的区别JAVA如何开启线程?怎么保证线程安全?Volatile和Synchronized有什么区别?Volatile能不能保证线程原创 2022-03-03 16:43:01 · 576 阅读 · 0 评论 -
JUC并发编程--------多线程的三大特性
什么是上下文切换并行和并发的区别并发三大特性(一) 可见性并发三大特性(二) 原子性并发三大特性(三) 有序性volatile介绍jvm层面内存屏障原创 2021-12-16 14:40:48 · 1104 阅读 · 0 评论 -
JUC并发----并发基础
目录一、多线程的相关知识简单了解多线程并行和并发的区别进程和线程的区别线程状态介绍二、创建线程的几种方式继承Thread类实现Runnable接口实现callable接口三种创建方式的区别三、多线程的常见方法start和run优先级Priority守护线程Daemon四、线程安全问题线程不安全场景分析(卖票问题):synchronized解决线程不安全问题(必须使用同一把锁)Lock锁解决线程不安全问题死锁现象不可见问题(线原创 2021-10-30 11:48:56 · 2334 阅读 · 0 评论