![](https://img-blog.csdnimg.cn/456d6cf3836d4fac976b47b91109f9e0.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 95
从线程的基本概念开始,到Java创建的基本方式,再围绕着多线程面临的三大问题:原子性、可见性、执行顺序慢慢展开,讲了CAS、volatile、Java对象锁、JMM、before-happen原则、Java显示式锁、AQS、高并发的设计模式、异步回调等知识。
长安不及十里
活到老,学到老,作为程序猿的基本修养,哈哈哈哈哈!
展开
-
Java高并发编程卷二(二) 锁
Cxq、EntryList、WaitSet这三个队列的说明如下:(1)Cxq:竞争队列(Contention Queue),所有请求锁的线程首先被放在这个竞争队列中。(2)EntryList:Cxq中那些有资格成为候选资源的线程被移动到EntryList中。(3)WaitSet:某个拥有ObjectMonitor的线程在调用Object.wait()方法之后将被阻塞,然后该线程将被放置在WaitSet链表中。原创 2022-11-16 14:36:08 · 3339 阅读 · 0 评论 -
Java线程安全与对象头结构信息
白话:当多个线程启动,对进程中同一资源进行操作时,可能会发生线程安全问题。专业术语:当多个线程并发访问某个Java对象(Object)时,无论系统如何调度这些线程,也无论这些线程将如何交替操作,这个对象都能表现出一致的、正确的行为,那么对这个对象的操作是线程安全的。synchronized方法和synchronized同步块有什么区别呢?synchronized方法是一种粗粒度的并发控制,某一时刻只能有一个线程执行该synchronized方法。原创 2022-11-16 10:36:06 · 2797 阅读 · 0 评论 -
多线程ThreadLocal详细介绍
ThreadLocal类通常被翻译为线程本地变量类或者线程局部变量类。在Java的多线程并发执行过程中,为了保证多个线程对变量的安全访问,可以将变量放到ThreadLocal类型的对象中,使变量在每个线程中都有独立值,不会出现一个线程读取变量时被另一个线程修改的现象。原创 2022-11-02 21:49:17 · 4900 阅读 · 0 评论 -
工作中何如来合理分配核心线程数?
混合型任务既要执行逻辑计算,又要进行大量非CPU耗时操作(如RPC调用、数据库访问、网络通信等),所以混合型任务CPU的利用率不是太高,非CPU耗时往往是CPU耗时的数倍。一般来说,一次Web请求的CPU计算耗时往往较少,大致在100~500毫秒,而其他耗时操作会占用500~1000毫秒,甚至更多的时间。CPU密集型任务虽然也可以并行完成,但是并行的任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以要最高效地利用CPU,CPU密集型任务并行执行的数量应当等于CPU的核心数。原创 2022-11-01 20:45:29 · 3065 阅读 · 0 评论 -
工作中禁止使用Executors快捷创建线程池?
虽然Executors工厂类提供了构造线程池的便捷方法,但是对于服务器程序而言,大家应该杜绝使用这些便捷方法,而是直接使用线程池ThreadPoolExecutor的构造器,从而有效避免由于使用无界队列可能导致的内存资源耗尽,或者由于对线程。原创 2022-11-01 11:06:24 · 2876 阅读 · 0 评论 -
Java 线程的核心知识
New状态通过new Thread(…)已经创建线程,但尚未调用start()启动线程,该线程处于NEW(新建)状态。RUNNABLE状态Java把Ready(就绪)和Running(执行)两种状态合并为一种状态:RUNNABLE(可执行)状态(或者可运行状态)。调用了线程的start()实例方法后,线程就处于就绪状态。此线程获取到CPU时间片后,开始执行run()方法中的业务代码,线程处于执行状态。就绪状态仅仅表示线程具备运行资格,如果没有被操作系统的调度程序挑选中,线程就永远处于就绪状态。原创 2022-10-31 20:44:35 · 3010 阅读 · 0 评论