多线程和高并发
文章平均质量分 60
小小书童DH
博主很懒,随便写写
展开
-
【接口优化】
java接口优化原创 2022-12-27 10:20:24 · 116 阅读 · 0 评论 -
线程间通讯
核心观点: CountdownLatch阻塞主线程,等所有子线程完结了再继续下去。 Syslicbarrier阻塞一组线程,直至某个状态之后再全部同时执行,并且所有线程都被释放后,还能通过reset来重用。 CountDownLatch CyclicBarrier 减计数方式 加计数方式 计算为0时释放所有等待的线程 计数达到指定值时释放所有等待线程 计算为 0 时,无法重置 计数达到指定值时,计数置为0重新开始 调用 countDown() 方法计数减一,调用 await(原创 2021-07-29 23:26:37 · 83 阅读 · 0 评论 -
实战篇-ThreadLocal
ThreadLocal 提供了线程本地的实例。它与普通变量的区别在于,每个使用该变量的线程都会初始化一个完全独立的实例副本。 ThreadLocal 变量通常被private static修饰。当一个线程结束时,它所使用的所有 ThreadLocal 相对的实例副本都可被回收。 ThreadLocal实现原理 其实是 ThreadLocal 内部维护了一个 Map ,这个 Map 不是直接使用的 HashMap ,而是 ThreadLocal 实现的一个叫做 ThreadLocalMap 的静态内部类。.原创 2021-07-29 16:06:12 · 202 阅读 · 0 评论 -
源码篇-AQS
AQS 总结 AQS 在内部为此了一个变量 state,用于记录锁状态,线程通过 CAS 修改 state即是加锁解锁过程。 AQS 内存维护了一条双向链表,即同步队列,等待锁的线程被封装为 Node 节点连成链表,通过 LockSuppor 工具类的 park()和 unpark()方法切换等待状态。 AQS 提供了独占和非独占两种锁实现方式,分别提供了 acquire()/release()和acquireShared()/releaseShared()两套加锁解锁方式; 同时,基于 sta原创 2021-07-29 11:05:53 · 78 阅读 · 0 评论 -
IO密集型和CPU密集型
计算密集型:任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数。 IO密集型:涉及到网络、磁盘IO的任务都是IO密集型任务(涉及到大量的网络传输,不仅如此,与数据库,与缓存间的交互也涉及到IO,一旦发生IO,线程就会处于等待状态,当IO结束,数据准备好后,线..原创 2021-07-08 10:12:04 · 344 阅读 · 0 评论