![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java多线程编程核心技术
文章平均质量分 91
Walter Sun
我小时候的理想是做一名科学家,用梦想改变世界。资深匠心码农 阿里扫地僧 Java天花板 IT极客 篮球梦 绘画乐器
展开
-
Go有协程,Java有虚拟线程,聊一聊Java Virtual Threads
通过修改同步块 synchronized 来避免频繁和长时间的锁定,并使用 java.util.concurrent.locks.ReentrantLock来保护潜在长时间的I/O操作,该锁以类似于同步代码中的隐式锁的方式控制多个线程对共享资源的访问。在该示例中,我们创建了一个 Semaphore 对象,并在一个线程中使用 acquire() 方法获取许可证,模拟对共享资源的访问。仔细考虑ThreadLocal的使用,因为您的应用程序中可能有很多虚拟线程,它们共用平台线程(即原来的线程)的内存空间。原创 2023-07-19 13:25:43 · 565 阅读 · 0 评论 -
聊一聊Java抽象同步队列AQS
AQS是锁的底层支持。原创 2023-07-16 00:14:47 · 277 阅读 · 0 评论 -
Java多线程调优上
初识上下文切换我们首先得明白,上下文切换到底是什么。其实在单个处理器的时期,操作系统就能处理多线程并发任务。处理器给每个线程分配 CPU 时间片(Time Slice),线程在分配获得的时间片内执行任务。CPU 时间片是 CPU 分配给每个线程执行的时间段,一般为几十毫秒。在这么短的时间内线程互相切换,我们根本感觉不到,所以看上去就好像是同时进行的一样。时间片决定了一个线程可以连续占用处理器运行的时长。当一个线程的时间片用完了,或者因自身原因被迫暂停运行了,这个时候,另外一个线程(可以是同一个线程或原创 2020-06-10 11:40:02 · 181 阅读 · 0 评论 -
Java多线程编程核心技术之原子类atomic
使用原子类进行i++操作 除了在i++操作时使用synchronized关键字实现同步外,还可以使用AtomicInteger原子类进行实现。 原子操作是不能分割的整体,没有其他线程能够中断或检查正在原子操作中的变量。一个原子类型(atomic)就是一个原子操作可用的类型,它可以在没有锁的情况下做到线程安全。文件AddCountThread.java代...原创 2019-01-04 21:24:33 · 169 阅读 · 0 评论 -
Java多线程编程核心技术之volatile关键字
volatile与死循环 在64bit的JVM上以“-server”服务器模式运行java线程类代码时,为了保证在该模式下保障线程运行的效率,线程会一直在私有堆栈中取值,而volatile关键字的作用是强制从公共堆栈中取得变量值,这样就能有效的解决死循环状态。 使用volatile关键字增加了实例变量在多个线程之间的可见性。但volatile关键...原创 2019-01-03 22:05:14 · 187 阅读 · 0 评论 -
Java多线程编程核心技术之方法join的使用
使用场景 在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束,这时,如果主线程向等待子线程执行完成后再结束,就需要用到join()方法了。 join()的作用是等待线程对象销毁。 方法join具有使线程排队运行的作用,有些类似同步的运行效果。join与synchronize...原创 2019-01-04 22:08:13 · 269 阅读 · 1 评论 -
不推荐使用Executors创建线程池,推荐通过ThreadPoolExecutor方式创建
线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 说明:Executors各个方法的弊端:1)newFixedThreadPool和newSingleThreadExecutor: 主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至OOM。2)newCachedThre...原创 2018-12-24 17:35:01 · 1014 阅读 · 0 评论 -
BIO、NIO和AIO的区别(简介)
BIO 同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。NIO 同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。AIO(NIO.2) 异...原创 2019-03-14 15:44:46 · 141 阅读 · 0 评论 -
jstack线程分析
先附上jstack命令1. 通过linux的top命令,显示当前活跃线程数,为CPU使用率降序排列2. 使用jstack pid(示例:jstack 10420)命令查看java进程的堆栈状态3. 通过thread dump分析线程状态例如:jstack -F 10420大多数情况下会基于thead dump分析当前各个线程的运行情况,如是否存在死锁、是否存在一个线程长时间持有锁...原创 2019-03-21 01:04:48 · 545 阅读 · 0 评论