一走进多线程
Posted Java码农社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一走进多线程相关的知识,希望对你有一定的参考价值。
走进多线程
一、并行和并发
1、小故事
2、定义
并发的关键是你有处理多个任务的能力,不一定要同时处理。
并行的关键是你有同时处理多个任务的能力。
通俗点说
并发:指在同一时刻做不止一件事情。比如数据库处理请求时,接受了第一个请求但是未处理完成,此时也可以接受第二个请求。两个请求任务在处理时间节点上可以有交集。
并行:指将大量的任务,拆解成多个子任务分配到多个线程上,并发的执行。比如你要计算1到100的和,可以将计算分成两个部分,一个线程计算1到50的和,另一个线程计算51到100的和。
所以我认为他们最关键的点就是:是否是『同时』。
3、案例
java8的那个并行特性就是多个线程去计算,最后合并。
二、线程和进程
进程是资源分配的基本单位。
线程是处理器(CPU)调度的基本单位。
进程是操作系统级别的,线程是进程级别的。
一个进程包含多个线程。(我们可以打开一个IDEA/Eclipse,然后JConsole去看线程数,会发现一个IDEA/Eclipse进程启动了N多个线程。)
三、多线程一定比单线程快吗
不一定!!!
因为线程切换是有开销的,需要消耗性能。若CPU是单核,那你开多个线程可能会使程序变慢,而单线程则会很快。
四、多线程优点
资源利用率更好
比如:下载文件。我们的流程是这样的:
1、将下载任务放到队列。
2、从队列里取出下载链接去下载。
若是单线程的话,那费老劲了,一个一个的下载,CPU大部分时间是空闲的,若是多线程呢?同时下载一批任务,岂不是更爽快?让CPU忙起来吧!
提高系统的吞吐率
多线程编程使得一个进程中可以有多个并发(即同时进行)的操作。例如,当一个线程因为I/O操作而处于等待时,其他线程任然可以执行其操作。
响应速度快
还是下载文件的案例,若我们请求一个下载接口,要等下载完才返回成功,那岂不是需要等太久了,如果我们业务逻辑都没问题直接返回成功岂不是更好?然后下载任务交由其他线程去处理。
五、多线程风险(缺点)
线程切换是有开销的,这会在一定情况下导致程序运行变慢。
多线程程序必须非常小心的同步代码,否则会引起死锁或数据不准确。
多线程程序极难调试,并且一些bug非常隐蔽,可能你99次都是对的,但是有1次是错的,不像单线程程序那么容易暴露问题。
六、线程的状态
七、广告
https://gitee.com/geekerdream/
以上是关于一走进多线程的主要内容,如果未能解决你的问题,请参考以下文章