
java并发编程
主要记录java并发编程的知识
ACanytime
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线程有几种状态,状态之间的流转是怎样的?
java线程中将就绪(READY)和运行中(RUNNING)两种状态笼统的称为“运行”。就绪(READY):线程对象创建后,其他线程(比如main线程)调用了该对象的start0方法。该状态的线程位于可运行线程池中,等待被线程调度选中并分配cpu使用权。运行中(RUNNING):就绪(READY)的线程获得了cpu时间片,开始执行程序代码。:进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。:新创建了一个线程对象,但是还没有调用start()方法。:表示该线程已经执行完毕。原创 2024-05-29 20:26:57 · 173 阅读 · 0 评论 -
什么是多线程中的上下文切换?
在多线程编程中,上下文切换是一种常见的操作,上下文切换通常是指在一个CPU 上,由于多个线程共享 CPU时间片,当一个线程的时间片用完后,需要切换到另一个线程运行。同时,需要将切换到的线程的状态信息恢复,以便于该线程能够正确运行。在多线程中,上下文切换的开销比直接用单线程大,因为在多线程中,需要保存和恢复更多的上下文信息。上下文切换是指CPU从一个线程转到另一个线程时,需要保存当前线程的上下文状态,恢复另一个线程的上下文状态,以便于下一次恢复执行该线程时能够正确运行。原创 2024-05-29 20:15:45 · 322 阅读 · 0 评论 -
synchronized关键字的底层原理
synchronized底层使用的JVM级别中的Monitor来决定当前线程是否获取了锁,如果某一个线程获取到锁,在没有释放锁之前,其他线程是不能或得到锁的。关于Monitor,Monitor对象存在于每个java对象头中,synchronized锁便是通过这种方式获取锁的,这也是为什么java中任意对象都可以作为锁的原因。如果没有线程持有,则让当前线程持有,表示该线程获取锁成功。:存储当前获取锁的线程的,只能有一个线程可以获取。获得锁的线程执行完了,释放了锁,就会唤醒。锁,竞争的时候是非公平的。原创 2024-03-22 09:53:45 · 544 阅读 · 1 评论 -
Synchronized和volatile、Lock有什么区别
1.volatile关键字是线程同步到轻量级实现,所以volatile性能比synchronized要好,但是volatile只能修饰变量,synchronized可以修饰方法以及代码块。第三性能层面:没有竞争时,synchronized做了很多优化,偏向锁、轻量锁性能不赖,竞争激烈时,Lock会有更好的性能。第二功能层面:都是悲观锁,但是Lock提供了许多synchronized不具备的功能,中断,超时,公平锁。Synchronized和Volatile的区别。其实二者是互补的,不是对立的存在!原创 2024-04-18 09:53:32 · 317 阅读 · 1 评论