一走进多线程

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/


以上是关于一走进多线程的主要内容,如果未能解决你的问题,请参考以下文章

51nod 1503 多线程dp

多线程学习一(多线程基础)

C# 多线程 ,可以多个线程做一任务,并且提高做任务的效率吗

多线程编程学习一(Java多线程的基础)

多线程初识多线程

(Java多线程系列一)快速入门