码迷,mamicode.com
首页 > 编程语言 > 详细

java-多线程思想解析

时间:2018-11-12 11:17:14      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:线程   多核   单线程   目的   实现   开启   取数   定义   数据库访问   

1.多线程定义:

  在单个程序中同时运行多个线程完成不同的工作.多线程本质上是空间换时间.单个程序是什么?一个正在执行的程序就是进程.线程是什么?线程是程序中一个单一的顺序控制流程.线程是程序中最小的执行单位,与进程同样都为基本单元,在一些老式操作系统中是不存在线程这个概念存在的.在这类操作系统中是无法实现线程的.所以多线程与多进程都是依托于操作系统的,都是操作系统的概念不是某种语言的一个概念.在windows中进程之间的内存空间是互相独立的,它的异步协同需要线程来完成,java在这种操作系统中是单进程多线程的体现.

2.多线程的应用场景:

  多线程并不一定能提升性能(甚至还会降低性能);多线程也不只是为了提升性能.

  1,避免阻塞:单线程中的程序是顺序执行的.如果前方操作出现阻塞后方操作无法执行.此时多线程就能解决这类问题.例1: 

 a = a1 + a2;
 b = b1 + b2;

 

  在单线程如果a 操作阻塞那么 b操作就无法执行,此时开启两个线程分别执行a,b就可以解决类似问题.

  2,避免CPU空闲:在进行数据库访问,磁盘IO时对CPU的利用率并不高,在此时可以多线程执行其他的任务,来让CPU繁忙起来.从而让整体程序加快速度完成.

  3,提升性能:需要进行空间换时间的情况下. 例2:

      要从三个数据库中取数据,每取一个数据库需要耗费10秒那么单线程则需要30秒,利用多线程多开两个线程则需要10秒.

3.多线程的应用前提

  1,任务具有并发性.如例1就可以使用多线程在下方情况是不行的,例3:

a = a1 + a2;
b = a + b1 ;

  b运算依赖于a的运算结果,在这种情况下是不值得多线程的,因为无法带来任何性能的提升.

  2,只有在当前性能瓶颈是cpu的情况下,多线程才能实现提升性能的目的.例4:

    一段程序在IO时(IOPS,IO吞吐量)拖慢了程序性能,即使把程序拆成两个线程去运行,也无法带来性能的提升.

  3.机器硬件上必须是多核的,负责即使是拆成多个可并行子任务,也没有多余的cpu去执行,只有一个cpu在多个线程中切换来却换去凭空增加了额外的开销.

 

java-多线程思想解析

标签:线程   多核   单线程   目的   实现   开启   取数   定义   数据库访问   

原文地址:https://www.cnblogs.com/cyh38472/p/9933533.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!