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:单核的话进程都是虚拟模拟出来的,多核处理器才可以执行真正的多线 ...
随机推荐
- git基础命令。
创建一个新的本地仓库 git init 克隆远程服务器 git clone URL 打开一个文件夹 cd 添加文件 git add . 本地提交更改 git commit -m ...
- win8、win10出现已禁用IEM时的处理办法
计算机管理--任务计划程序--任务计划程序库--Microsoft--Windows--TextServicesFramework--MsCtfMonitor--运行即可
- Android 图片旋转
拍照后的照片有时被系统旋转,纠正步骤如下: 1.先读取图片文件被旋转的角度: /** * 通过ExifInterface类读取图片文件的被旋转角度 * @param path : 图片文件的路径 * ...
- Week2——XML
一.什么是XML? XML是可扩展标记性语言,类似于HTML,被设计为传输和存储数据,其焦点是数据的内容.XML的标签没有被预定义,用户就需要自行定义标签,也可随意定义标签.XML 允许创作者定义自己 ...
- 7.bootstrap HTML编码规范
Bootstrap HTML编码规范 语法 用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展现的方法. 嵌套元素应当缩进一次(即两个空格). 对于属性的定义,确保全部使用双 ...
- MySQL 8.0复制性能的提升(翻译)
What’s New With MySQL Replication in MySQL 8.0 MySQL复制从问世到现在已经经历了多个年头,它的稳定性和可靠性也在稳步的提高.这是一个不停进化的过程,由 ...
- Castle.Windsor IOC/AOP的使用
Castle最早在2003年诞生于Apache Avalon项目,目的是为了创建一个IOC(控制反转)框架.发展到现在已经有4个组件了,分别是ActiveRecord(ORM组件).Windsor(I ...
- 模型层(template)
错误之forbbiddon csrf_token:这个标签用于跨站请求伪造保护 提交数据的时候就会做安全机制,当你点击提交的时候会出现一个forbbiddon 的错误,就是用setting配置里的sc ...
- 集合、深浅copy
集合set: 集合也和列表数组一样有增加,但是集合是真正的没有顺序的 所以集合无法查找的,并且集合的外观你看着好像是字典和列表的组合,因为它是用字典的括号一样 ,但是又是里面并没有键值对 只是一个 ...
- 入门级 - 码云(Gitee),GitHub 教程
这篇文章的目的是记录我的关于GitHub的内容,从注册.下载直到设置成功每一步都有解释,其中有一些截图或者代码来自于网络. GitHub和码云均基于Git,所以两者的操作方法基本一致,只需要学习其中一 ...