![](https://img-blog.csdnimg.cn/34fddd651b644c6cb8eadfe2565d85f4.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发纠缠
文章平均质量分 96
记录并发编程相关知识点
EijoaHoaiQ:D
来日方长
展开
-
(五)Java 的内存模型 JMM
一方面,需要 JMM 提供一个强的内存模型来编写代码;另一方面,编译器和处理器希望 JMM 对它们的束缚越少越好,这样它们就可以最可能多的做优化来提高性能,希望的是一个弱的内存模型。JMM 考虑了这两种需求,并且找到了平衡点,对编译器和处理器来说,只要不改变程序的执行结果(单线程程序和正确同步了的多线程程序),编译器和处理器怎么优化都可以。而对于我们开发来说,JMM 提供了 happens-before 规则(JSR-133规范),满足了我们的需求——简单易懂,并且提供了足够强的内存可见性保证。原创 2023-07-17 16:37:20 · 203 阅读 · 0 评论 -
(四)并发编程带来了哪些问题?
CPU 是很宝贵的资源,速度也非常快,为了保证雨露均沾,通常为给不同的线程分配时间片,当 CPU 从执行一个线程切换到执行另一个线程时,CPU 需要保存当前线程的本地数据、程序指针等状态,并加载下一个要执行的线程的本地数据、程序指针等,这个开关被称为。这时线程 2 执行 get() 方法,首先会从主内存中读取 i 的值,然后加载到自己的工作内存中,这个时候读取到 i 的值是 50,再将 50 赋值给 j,最后返回 j 的值就是 50 了。然而,车道一旦多起来,也就意味着『加塞』的场景可能就会越来越多。原创 2023-07-06 14:53:47 · 550 阅读 · 0 评论 -
(三)线程组和线程优先级
可以看到终端或命令提示符界面没有任何输出,main 线程(非守护线程)在启动了 DaemonThread 线程之后随着 main 方法的执行结束而终止了,而此时 Java 虚拟机中已经没有非守护线程了,所以 Java 虚拟机需要退出,同时 Java 虚拟机中所有的线程都要立即终止,因此 DaemonThread 守护线程直接终止,finally 代码块中的语句并没有执行。由此可见,如果某个线程的优先级大于线程所在线程组的最大优先级,那么该线程的优先级将会失效,取而代之的是线程组的最大优先级。原创 2023-07-04 17:59:19 · 371 阅读 · 0 评论 -
(二)线程的六种状态及上下文切换
线程的六种状态及上下文切换。原创 2023-07-02 16:52:54 · 750 阅读 · 0 评论 -
(一)创建线程的三种方式
如果其他线程都执行完毕,main() 方法也执行完毕,JVM 就会退出,也就是停止运行。如果 JVM 都停止运行了,守护线程自然也就停止了。创建一个类实现 Callable 接口,重写 call() 方法,这种方式可以通过FutureTask获取任务执行的返回值。使当前正在执行的线程暂停指定的毫秒数,也就是进入休眠的状态。显然,这些概念是很抽象的。因为 run() 方法是用来封装被线程执行的代码。原创 2023-06-29 22:20:07 · 471 阅读 · 0 评论