哈喽 我又来填坑了,之前写了两篇很简易的JUC,然后有两位好兄弟给我私信问我能不能详细那么亿点点,所以,我来了,本文参考资料应该是黑马或者是尚硅谷的,记不太清了,去年看的视频,今年刚发,见谅!
介绍
本系列文章共八篇,将从浅到深的讲述Java中并发编程相关知识,参考资料分为视频和书籍两部分,忘记了视频是哪个机构的了,书供参考三本 分别是《Java并发编程的艺术》、《Java多线程编程的核心技术》、《Java并发编程实战》,搭配上我这仅有的一点点工作以及实战经验,写出本系列文章,如果有文章中有任何错误或描述不准确的地方,欢迎各位大佬指正!
进程和线程
进程
-
什么是进程?
进程可以理解为一个程序,比如说我们运行的chrome来访问csdn,其chrome就是一个进程,再比如说QQ,微信,360,这都是一个个的进程 -
进程分为哪几种
进程分为可重复和不可重复运行两种,顾名思义,就是一个程序能否多次启动,可以重复启动的比如说txt,word等,不可重复启动的,如钉钉,QQ音乐,360等。 多次启动就会自动唤醒后台进程。
线程
- 什么是线程
一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行,Java 中,线程作为最小调度单位,进程作为资源分配的最小单位。 在 windows 中进程是不活动的,只是作为线程的容器,一个进程中,可以有多个线程同时运行,也就是我们所谓的并发线程,即Java多线程技术
进程和线程的区别
- 一个程序只有一个进程,可以有多个线程
- 不同进程通信比较麻烦,不同线程之间通信比较简单,本机跨进程通信需要使用IPC技术,不同机器则需要使用网络,如Socket HTTP等,而线程通信则很简单。
- 线程资源可以共享,进程资源相对于线程更加独立
- 线程更轻量,线程上下文切换成本一般上要比进程上下文切换要低得多
并发和并行
并发
- 什么是并发
而并发是指两个或多个事件在同一时间段内(很短)发生
并行
- 什么是并行
并行是指两个或者多个事件在同一时刻发生
也许这样说是很抽象的,这里说一个技巧,微观并发,宏观并行,就是对于我们来讲,其实看到的效果就是并行的,多件事情在同一时刻被处理了,但是对于CPU来讲,因为存在一个时间片切换,但是时间很短,只有15ms左右,人眼是无法发现的。 所以微观并发,宏观并行的意思就是其实CPU执行的是并发,我们看着的是并行。 所以才有高并发的概念,并没有高并行这一说。
实际应用
- 使用Java多线程提高多核CPU利用效率,避免一核努力,七核围观的情况。
如某安全软件的多个页签,可以同时清理垃圾,杀毒,甚至可以下载广告等,这就属于利用多线程充分使用CPU资源 - 使用异步技术 (如Ajax等) 可以避免长期等待返回结果所造成的阻塞
比如要做一个文件下载的操作,调用了一个很耗时的方法,此时如果使用同步的方式,便会造成程序阻塞,长时间等待返回结果的情况