咋们谈谈 Java 并发编程
1.为什么要有并发编程?
在现在计算机硬件在高速发展,多和计算机已经成为时代的发展主流,为了提高多核 CUP 的利用率。随之提升程序的性能,如:响应时间、吞吐量、计算机资源使用率等。
2.什么是并发编程?
所谓并发编程是指在一台处理器上“同时”处理多个任务。
3.我们了解了解 Java 并发编程!
3.1 首先咋们要谈谈什么是进程、什么是线程!
进程:是正在运行的程序;是系统进行资源分配和调度的基本单位!
线程:单个线程是进程(正在运行的程序)的一个任务;是系统进行资源能够进行调度的最小单位!
进行和线程的区别:
1.先有进程,后有线程;
2.进程是基本单位;线程是最小单位;一个进程中包含多个线程;
3.默认情况下,进程之间的内存无法共享,线程之间的共享父进程的内存。
3.2 咋们接下来谈谈什么是串行、并行、并发?
串行:
按序执行;第一个任务没有执行完第二个任务不能执行;
并行:
同时执行,多管齐下;在多核 CUP 下,有两个或两个以上的任务同时执行;
并发:
穿插执行,减少等待;多个任务穿插轮流执行,实质是一个 CUP 在若干个程序之间多路复用,目的就是提高有限资源的利用率。
3.3 并发编程的三个核心(分工、协作、互斥)
分工:
**把一个任务分解程多个步骤(小任务),在什么时候谁完成那个任务。**任务分解和分工对于项目成败是非常关键,不过在并发领域中,分工更加重要,它直接决定了并发程序的性能。(在 Java 中为分工提供很多方法:Executor、Fork/Join、Futer;总结的设计模式:生产者-消费者、WorkerThread);
协作:
实质是一个任务完成了,如何通知后续的任务开始执行。(例如:我们经常使用的的生产者-消费者模式,当队列是满时,生产者就需要等待,当队列不满时,通知生产者开始工作;当队列空时,消费者就需要等待,当队列不空时,通知消费者开始工作);
互斥:
分工、协作主要强调的是性能,但并发程序里还有一部分关于正确性的,线程安全。当多个线程访问一个共享变量时,结果往往时不能确定的。就可能导致一些问题。导致问题的只要三个主要源头是:可见性、有序性、原子性;所以 Java 引入了内存模型,模型提供了一些规则,利用规则,我们可以避免可见性问题、有序性问题、但是不能完全解决线程安全问题;解决线程安全的问题的核心还是互斥。实现互斥的核心还是“锁”;(Java 里的锁 synchronized、Lock),互斥的思想是:同一时间刻,只允许”一个线程“访问共享变量。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于