多线程&锁
文章平均质量分 79
多线程之瞎折腾
legendaryhaha
legendaryhaha的博客
展开
-
ThreadLocal
ThreadLocal使用原理场景注意使用使用很简单,例子如下:public class TestThreadLocal { static ThreadLocal<Integer> THREADLOCAL = new ThreadLocal<>(); public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(new Run原创 2021-02-25 11:31:59 · 124 阅读 · 1 评论 -
Java 锁
Java 锁前言分类锁的状态锁的设计方案自旋锁/自适应的自旋锁锁粗化/锁消除分段锁锁的特性/性质公平锁/非公平锁共享锁/独享锁乐观锁/悲观锁前言各种花花绿绿的锁的充斥我们的眼球,在面对这么些个名词时:自旋锁,阻塞锁,可重入锁,读写锁,互斥锁,悲观锁,乐观锁,公平锁,偏向锁,对象锁,线程锁,锁粗化,锁消除,轻量级锁,重量级锁,独享锁,共享锁,分段锁的时候,我只想说…但是,摸了摸干瘪的钱包,还是继续选择苟延残喘。分类锁的状态在Java中,锁的状态可分为:偏向锁:偏向于第一个获得锁的线程(可能原创 2021-02-24 19:37:30 · 135 阅读 · 0 评论 -
Java之AQS(三)
AQS前言阻塞的线程醒过来了interruptMode前言上篇文章 中,我们分析了同步队列的节点如何new出条件队列,条件队列节点又是如何跑到同步队列中去的。 而在分析同步队列的节点如何new出条件队列的时候,我们从 await方法开始分析,直到了 isOnSyncQueue方法。而本篇内容将接着继续分析。public final void await() throws InterruptedException { // 如果当前线程被中断过, 则直接抛出中断异常原创 2020-05-13 17:57:17 · 459 阅读 · 2 评论 -
线程池的滥用造成应用挂了.....
线程池的滥用造成应用挂了.....前言解决方式扯扯5个线程池四种拒绝策略异常处理线程“坏了”咋办关于线程池的大小设置前言接手了一个项目,用了 ThreadPoolExecutor自定义了线程池,然后项目中异步的任务就都采用它来运行~然而,在众多的异步任务中,有那么一个任务是会开启无头浏览器的。这个东西是占资源的,周末数量量大的时候,大量线程都执行了此任务,造成CPU、内存资源占用迅速飙升,从而影响到其他正常服务,应用挂了......解决方式都是异步任务了,此等占用资源的服务,采用1~2两个线程去跑原创 2020-08-08 17:24:21 · 1408 阅读 · 0 评论 -
LeetCode|交替打印FooBar
LeetCode|交替打印FooBar题目连接,如下,输入一个n,交替打印Foo和Bar,各n次。class FooBar { public void foo() { for (int i = 0; i < n; i++) { print("foo"); } } public void bar() { for (int i = 0; i < n; i++) { print("bar"); } }}看到这道题的第原创 2020-07-19 18:17:34 · 415 阅读 · 0 评论 -
【Java计时器】CountDownLatch
【Java计时器】CountDownLatch前言如何使用分析构造方法awaitacquireSharedInterruptiblydoAcquireSharedInterruptiblysetHeadAndPropagatedoReleaseSharedcountDownreleaseSharedtryReleaseShared插曲:独占&共享总结结束语????AQS(一)AQS(二)AQS(三)????前言 CountDownLatch是基于AQS进行实现的一个计时器,如果原创 2020-05-17 08:47:31 · 302 阅读 · 0 评论 -
Java之AQS(二)
AQS前言如何使用await前言 在前一篇文章,我们分析了AQS入队的方式( addWaiter)及入队后,对队列中每个节点进行自旋+CAS获取锁的操作(acquireQueued)。而本文将分析Condition下的队列,又称为条件队列。 AQS中的队列分为同步队列和条件队列两种,这两种队列即相互独立又藕断丝连。本文接下来将分析条件队列是如何新建、又是如何和同步队列藕断丝连的。如何使用 按照国际惯例,这里先给出一个例子:在例子中,我们通过lock.newCondition(原创 2020-05-12 17:47:33 · 677 阅读 · 0 评论 -
Java之AQS(一)
AQS/** * Creates an instance of {@code ReentrantLock}. * This is equivalent to using {@code ReentrantLock(false)}.*/ public ReentrantLock() { sync = new NonfairSync(); }原创 2020-05-10 19:25:02 · 351 阅读 · 0 评论 -
Java之多线程创建
Java多线程归纳前言传统的线程创建继承Thread类实现Runnable接口两者的共同点两者差别JDK 1.5开始出现的线程创建前言进程是资源分配的最小单位,而线程是执行任务的最小的单位。进程里的线程可以共享该进程拥有的资源,而进程之间不可以,进程奔溃了,在保护模式下,不会影响其他进程,而线程一旦出问题了,该进程也要GG思密达。总而言之,创建一个线程比创建一个进程要省事得多儿,这也是当今为...原创 2019-03-20 19:10:31 · 3692 阅读 · 0 评论