![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程的艺术
岁月无痕study
这个作者很懒,什么都没留下…
展开
-
一、并发编程的挑战
Java并发编程的目的是为了让程序运行的更快,但不是启动更多的线程就能让程序最大限度的执行,因为在并发编程中,启动更多的线程,会面临上下文切换、死锁、以及所使用的软件和硬件的资源限制等问题。 1.1上下文切换 单核处理器下,多线程执行代码,cpu给每个线程分配cpu时间片来实现多线程,cpu不停地切换线程执行,让我们感觉多个线程是同时执行的。 Cpu通过时间片分配算法来循环执行任务,当任务A执原创 2017-06-07 11:26:52 · 302 阅读 · 0 评论 -
二、Java并发机制的底层实现原理
Java代码编译后变成java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,java中所使用的并发机制依赖于JVM的实现和CPU的执行。2.1 volatile的应用 在多线程并发编程中,synchronized和volatile都扮演重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证共享变量的“可见性”。可见原创 2017-06-07 14:45:20 · 827 阅读 · 1 评论 -
三、Java内存模型---Java内存模型的基础
3.1 Java内存模型的基础 3.1.1 并发编程模型的两个关键问题 并发编程中,有两大关键问题:线程之间如何通信和线程之间如何同步。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态 进行隐式通信。 在消息传递的并发模型里,线程之间没有公共状态,线程之间必须原创 2017-06-15 13:31:24 · 437 阅读 · 0 评论 -
三、Java内存模型---重排序和顺序一致性
3.2 重排序 重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。 3.2.1 数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间 就存在数据依赖性。数据依赖分为下列3种类型,如表3-4所示。 上面3种情况,只要重排序两个操作的执行顺序,程序的执行结果就会被改变。 前面提到过,编译器和处理器可能会对操作做重排序。编译原创 2017-06-15 14:12:31 · 1318 阅读 · 0 评论