多线程

多线程基础

1.多线程

​   cpu执行代码都是一条一条执行的,但是即使是单个cpu,也可以同时执行多个任务。因为操作系统在执行多个任务实际上就是让cpu对多个任务交替执行。

​   例如: 我们这有三门课程,数学、语文、英语,每一门作业都需要30分钟完成。我们把这三门作业看成是3个任务,可以先做1分钟语文,在做1分钟数学,在做一分钟英语作业 ,这样轮流做下去,在某些人的眼里就觉得做的非常快,就像三门作业一起做一样。

​   在操作系统上多个任务交替执行。 例如: 让网易云音乐执行0.1秒,让cf执行0.1秒,让wegame执行0.1秒,在人看来,cpu就是在执行多个任务。

​   注:即使是多核心的CPU,因为通常任务数量远远超出CPU的核数,所以任务也是需要交替的。

2.进程

  在计算机中,我们把一个任务称为一个进程,cf是一个进程,网易云音乐播放器就是一个进程,wegame这些都是进程。

  某些进程内部还需要同时执行多个子任务。例如: 我们经常听歌用的网易云音乐,我们可以一边听歌,同时我们还可以搜索别的歌曲,我们还可以一遍看着桌面歌词,我们把子任务称之为线程。

​   注:进程和线程的关系就是:一个进程可以包含一个或者多个线程,但至少会有一个线程。
进程和线程的关系
​   操作系统调度的最小单位其实不是进程,而是线程。常用的windows、Linuux等操作系统都是采用抢占式多任务,如何调度线程完成操作系统决定,程序自己不能决定什么时候执行,以及执行多长时间。

​   因为同一个应用程序,即可以有多个线程,因此,实现多任务的方法,有以下几种:

多线程模式(每个进程只有一个线程):
每个进程只有一个线程

多线程模式(一个进程有多个线程):
一个进程有多个线程
多线程+多进程(复杂度最高):
多线程+多进程

3.进程vs线程

​   进程和线程是包含的关系,但是多个任务既可以由多个进程实现,也可以由单个进程内的多个线程实现,还可以混合多进程+多线程。

采用哪种方式完成任务,就需要考虑进程和线程的特点了。

和线程相比,多线程的缺点在于:

  • 创建进程比创建线程的开销大
  • 进程间通信比线程间的通信慢,因为线程之间通信就是读写用一个变量,速度很快。

而多进程的优点在于

​   多进程比较稳定,因此在多进程的情况下,一个进程崩溃不会影响其他进程,而在多线程的情况下,任何一个线程崩溃会直接导致程序崩溃。

​   进程与线程的选择取决于以下几点:

  1. 需要频繁创建销毁的优先选择线程,因为对于进程来说创建销毁的代价都是比较大的。
  2. 线程的切换速度快,所以在需要大量计算,切换频繁时用线程,还有耗时操作时用线程可以提高响应
  3. 并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求
  4. 需要更稳定安全时,适合选择进程;需要速度时,选择线程更好

  小结:多线程提升CPU的利用率

4.多线程总结

​   Java语言内置支持多线程:一个Java程序实际上就是一个JVM进程,JVM进程用一个主线程main()方法,在main()方法内部,我们可以启动多个线程。此外,JVM还有垃圾回收机制,回收其他多线程。

注:因此,对于大多数Java程序来说,我们说过多任务,实际上实在说如何用多线程完成多任务。

  和单线程相比多线程的特点:多线程经常需要读写共享数据,并且需要同步。**例如:**在播放电影的时,就需要一个线程播放视频,一个线程播放音频,两个线程需要协同运行,否则画面和音频不会同步。所以多线程编程的复杂度高,调试更困难。

Java多线程编程特点

  • 多线程模型是Java程序最基本的并发模型
  • 数据库、web开发,都依赖于Java的多线程模型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值