Java多线程技术详解理论篇

多线程技术在现实中已经应用的非常普遍,java也给与了非常方便的技术实现,只需要调用相应的类就可以实现开启多个线程的执行。但是究竟什么时候使用多线程技术,多线程执行效率是否一定比单线程要高呢?相信很多人在开发者中也是模棱两可,下面是我对于多线程技术的思考和总结

jesen
1
2020-03-22 08:25:31
文档目录
我的书签
 

为什么要使用多线程技术

学习一门新技术或者认识一种新事物,首先需要了解它的历史及由来,了解了它的前因后果后,就可以很好地去掌握它。对于我们人类来说,只有一个大脑指挥我们进行各种操作;就上班这件事来说,我们来看一下大脑的处理:
  1. 首先大脑会进行逻辑判断:是否需要上班? 需要
  2. 如果需要上班,怎么去公司?开车还是公共交通? 选择公共交通
  3. 在乘坐公共交通的途中是否需要学习?是
  4. 到达公司,那么同时就完成了两件事情(上班行程和学习),如果在途中不选择进行学习,那么就只能完成一件事情(上班行程)
可以看出来大脑同时只能着重于办一件事情,为什么我们在上班途中可以办成两件事情呢?因为我们大脑对于操作进行了切换,在任务执行过程中(上班途中)我们切换了别的任务(学习);对于计算机来说CPU就是它的大脑(刚开始CPU也是设计为单核的,类似于人的大脑同时只能操作一件事情),那么如何在单核的CPU中模拟人类大脑的“任务切换“,编程语言给出了多线程的技术来帮助我们实现。

多线程技术在编程开发中的优缺点

一、多线程的优点
  1. 提升阻塞型任务的执行效率:一个比较耗时的文件上传,文件下载,或者好友聊天都需要长时间的建立连接,如果一个线程去处理的话是不能收发消息的;因资源独占而发生等待时,可以执行其他任务
  2. 充分利用CPU的资源:现在的CPU都是多核多线程的,为了提高CPU的使用率,采用多线程的方式,在CPU空闲的时候可以执行其他任务(类似于以上例子:上班途中是空闲的,正好可以看书)
  3. 便于理解:多线程中的处理程序原理上依然是顺序执行,符合普通人的思维习惯,所以对于开发者来说便于理解,编程简单
二、多线程的缺点
  1. 降低程序的执行效率:程序中如果有大量的线程,会影响性能,因为操作系统需要在它们之间不停的进行切换,维护每个线程的中间状态
  2. 时间和空闲开销增大:更多的线程需要更多的内存空间和更多的CPU切换时间
  3. 开发复杂性增大:多个线程之间数据的共享处理,线程锁的介入导致程序复杂性加大

多线程到底该怎么理解,什么是多线程

说到什么是线程必须先了解什么是进程,进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程,比如:wechat.exe、qq.exe;线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如wechat.exe进程中可以运行很多线程。线程总是属于某个进程,一个进程中必须有一个线程(也就是主线程),进程中的多个线程共享进程的内存。关于进程和线程的详解可以查阅其他文档

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用来实现进程的调度和管理以及资源分配。

多个线程或进程”同时”运行只是感官上的一种表现。事实上进程和线程是并发运行的,操作系统的“线程调度机制“将时间划分为很多时间片段(时间片),尽可能均匀分配给正在运行的程序,获取CPU时间片的线程或进程得以被执行,其他则等待。而CPU则在这些进程或线程上来回切换运行。微观上所有进程和线程是走走停停的,宏观上都在运行,这种都运行的现象叫并发,但是不是绝对意义上的“同时发生“。

所以多线程不等于真正意义上的并发执行,计算机CPU实现在现实逻辑上不可能是真正的并发执行的(即使现在的CPU是多核多线程),试想一下在计算机中、在同一时刻会有多少的任务需要执行,打开操作系统的“任务管理界面“可以看到在当前操作系统下正在运行的程序列表数量有多少,这也表明了操作系统会有一套“进程调用机制”和“线程调用机制”的程序实现来运行这么多的任务,关于这方面的技术栈属于操作系统原理与实现了,读者可以查阅相关方面的书籍进行了解
友情提示