java核心技术-多线程之引导概念
前两篇文章分别讲了,Java线程相关基础概念以及线程的内存模型,本节作为后续章节的引导,个人认为对于学习后面的只是还是比较重要。好了,既然说了多线程,那么首先要弄清以下几个问题:
1. 什么是多线程?
2. 为什么要使用多线程?
3. 在什么场景下使用多线程?
4. 使用多线程会导致什么问题?
5. 如何正确使用多线程?
6. 如何高效使用多线程?
对于问题1,什么是多线程?我们知道现代计算机操作系统基本上都是多道的,什么是多道操作系统,说白了就是允许多个进程同时运行的操作系统。而对于一个进程而言必然会后一个主线程作为执行程序代码的实际执行者,这样的程序就属于单进程单线程的程序,如果在主线程中又构建了一个或者多个子线程,那么这个程序就是单进程多线程的程序。
对于问题2,为什么要使用多线程?我们知道计算机的基本组成包括CPU(控制器、运算器)、内存,外存(如硬盘)、输入输出设备;现代计算机的cpu速度是非常快的,内存和外存设备的速度是相对比较慢的,依次都是差距很多数量级的。cpu执行的速度远远大于内存和外存速度,那么就会出现一个问题,就是cpu的利用率的问题。比如让计算机到硬盘中去一个文件然后打印出来其中的内容,那么过程大致是cpu->操作系统->硬盘->内存->cpu,其中我们知道cpu与内存与硬盘的速度差距非常大,那么耗时最长的就是访问硬盘,点到为止,假设完成这个任务cpu执行时间是1s,内存10s,磁盘100s,那么完成这个任务所需的时间大致是111s,我们可以看出计算机主要瓶颈发生在磁盘访问这里,cpu的空闲时间也就是99s,这对于昂贵的cpu来说是严重的浪费,那么怎么才能减少cpu的浪费呢。答案是多个进程,多个线程。这样在一个线程或者进程被cpu暂时停止执行时,有其他的可以被cpu执行这样就可以是cpu繁忙起来,不会导致浪费,当然也不是一定把cpu累死,有一定的上限。
对于问题3,在什么场景下使用多线程?简单来说就是在能够提升cpu利用率,提高完成任务效率的情况下就可以使用多线程。
对于问题4,使用多线程会导致什么问题?多线程可能导致的问题就是资源争用、数据一致性问题以及上下文切换带来的资源和性能的消耗。
对于问题5,如何正确使用多线程?对于java来说有final,synchronized,lock,volatile以及并发库来保证线程安全。
对于问题6,如何高效使用多线程?高效的多线程jvm自身提供了很多机制优化锁提升多线程效率,对于程序员在编程是可以采用锁细化,锁代替以及高效并发库等方式来高效使用多线程并且保证线程安全。
ok,下面张姐结合着6个基本问题分别讲述。
java核心技术-多线程之引导概念的更多相关文章
- java核心技术-多线程之线程基础
说起线程,无法免俗首先要弄清楚的三个概念就是:进程.线程.协程.OK,那什么是进程,什么是线程,哪协程又是啥东西.进程:进程可以简单的理解为运行在操作系统中的程序,程序时静态代码,进程是动态运行着的代 ...
- java核心技术-多线程基础
进程.线程 进程(Process) 是程序的运行实例.例如,一个运行的 Eclipse 就是一个进程.进程是程序向操作系统申请资源(如内存空间和文件句柄)的基本单位.线程(Thread)是进程中可 ...
- java核心技术-多线程之线程内存模型
对于每一种编程语言,理解它的内存模型是理所当然的重要.下面我们从jvm的内存模型来体会下java(不限java语言,严格来讲是JVM内存模型,所有JVM体系的变成语言均适用)的内存模型. 堆: 就是我 ...
- java核心技术-多线程之基本使用
多线程程序好处就是可以提高cpu使用率和系统的性能.这里举个例子,民以食为天,咱们以餐馆为例(后面基本上都用餐馆作为对象),后面如果没有特殊说明均采用本节相关术语,围绕餐馆我们可以抽象出如下几个角色以 ...
- Java的多线程机制系列:(一)总述及基础概念
前言 这一系列多线程的文章,一方面是个人对Java现有的多线程机制的学习和记录,另一方面是希望能给不熟悉Java多线程机制.或有一定基础但理解还不够深的读者一个比较全面的介绍,旨在使读者对Java的多 ...
- Java 多线程的基本概念
一.线程介绍 多线程同时运行时,单CPU系统实际上是分给每个线程固定的时间片,用这种方式使得线程“看起来像是并行的”.在多CPU系统中,每个CPU可以单独运行一个线程,实现真正意义上的并行,但是如果线 ...
- java 并发多线程 锁的分类概念介绍 多线程下篇(二)
接下来对锁的概念再次进行深入的介绍 之前反复的提到锁,通常的理解就是,锁---互斥---同步---阻塞 其实这是常用的独占锁(排它锁)的概念,也是一种简单粗暴的解决方案 抗战电影中,经常出现为了阻止日 ...
- java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)
目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...
- JAVA之多线程概念及其几种实现方法优劣分析
1. 多线程 程序:指令集,静态的概念 进程:操作系统调动程序,是程序的一次动态执行过程,动态的概念 线程:在进程内的多条执行路径 Ps:单核的话进程都是虚拟模拟出来的,多核处理器才可以执行真正的多线 ...
随机推荐
- 须知的css——margin不重叠的情形
margin重叠 摘自css2.1规范中文版 CSS中,两个或者多个盒(可能但不一定是兄弟)的相邻的margin会被结合成一个margin.Margin按这种方式结合叫重叠(collapse),产生的 ...
- System Monitor ArcGIS系统监控利器
System Monitor是Esri推出的GIS系统监控工具,对于GIS数据中心的运维人员是难得的利器.早期版本是开源免费的解决方案,在今年的Esri 全球用户大会上,Esri宣布将发行商业版的Sy ...
- Portal for ArcGIS 10.2.2更改域名和导入自定义证书
1.产品版本 Portal for ArcGIS10.2.2(同样适用于ArcGIS10.3) 2.修改说明 )修改Portal中的域名:(2)修改Portal中的证书. 3.修改步骤 3.1.在ho ...
- C++学习笔记(2)----模板
1. 与其他任何类相同,我们既可以在类模板内部,也可以在类模板外部为其定义成员函数,且定义在类模板内的成员函数被隐式声明为内联函数. 2. 默认情况下,对于一个实例化了的类模板,其成员只有在使用时才被 ...
- 自定义BaseActivity
思路很简单:将软件里用到的大量重复的页面布局抽象出来,编写成一个抽象的Activity类,然后在实现具体页面时继承它,并且在主内容空白区填入需要的内容. 例如在最近开发的一款资讯类应用中,每张页面上面 ...
- xshell连接虚拟机Connection failed
一.问题描述:xshell连接不了虚拟机,出现错误提示:Could not connect to '192.168.1.100' (port 22): Connection failed. 二.查找错 ...
- Evernote Markdown Sublime实现
版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/3996164.html Evernote无法实现markdow ...
- Linux 虚拟机配置-network is unreachable
配置虚拟机时,遇到network is unreachable,根据网上找来的方法处理,最终自己试过,成功修改的方法在这里记录一下: 修改虚拟机的网络适配器:桥接,复制物理机网络 vim /etc/s ...
- Java多线程学习笔记(三)同步和异步
首先是一段代码: public class HasSelfPrivateNum { public void addI(String username){ try { int num=0; if(use ...
- Linux yum提示Loaded plugins错误的解决方法
yum是Linux软件包管理器,也叫yum源,在yum使用过程中,有时会出现Loaded plugins错误,重启无效,遇到这种情况该如何解决呢?下面就给大家介绍下Linux yum提示Loaded ...