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:单核的话进程都是虚拟模拟出来的,多核处理器才可以执行真正的多线 ...
随机推荐
- 【Win32】对指定进程进行禁音
使用例子如下: CAudioMgr AudioMgr; AudioMgr.SetProcessMute(GetCurrentProcessId()); H文件的内容如下: #pragma once # ...
- 解决API中无法使用session问题
处理API无法使用session的方法,贴图: 1调用如下图 2.需要在Global.asax文件中配置一些东西 protected void Application_PostAuthorizeReq ...
- unistd.h文件
转载地址:http://baike.baidu.com/link?url=nEyMMFYevs4yoHgQUs2bcfd5WApHUKx0b1ervi7ulR09YhtqC4txmvL1Ce3FS8x ...
- this keyword details
学生类: package com.itheima_07; /* * 学生类 * * 起名字我们要求做到见名知意. * 而我们现在的代码中的n和a就没有做到见名知意,所以我要改进. * * 如果有局部变 ...
- Redis的基本操作语句
注:以下出现的key.value都需要具体 1.String类型的数据存储获取 set key value:设置key的值为value,若存在则覆盖,不存在则自动创建decrby get key:获取 ...
- 阅读《大道至简第一章》读后感 (java 伪代码)
通读大道至简第一章愚公移山,可以将其看做一个完整的工程,首先是创建工程的原因,需求:“惩山北之塞,出入之迂”,而后是团队之间的商议:“聚室而谋曰”,然后确定工程的目标:“毕力平险,指通豫南, ...
- 创建基于 AFS 的 Docker 容器卷
标准的 Docker 容器卷一般是位于 Docker 主机上的一个本地目录.在这样的配置下,容器必须依赖于一台特定的主机,因此使得容器的迁移和扩展变得困难.通过使用容器卷插件,能让容器访问独立于主机的 ...
- 使用ifstream和getline读取文件内容[c++] ZZ
假设有一个叫 data.txt 的文件, 它包含以下内容: Fry: One Jillion dollars.[Everyone gasps.]Auctioneer: Sir, that's no ...
- Python 爬虫 获取标签下面的子标签
thr_msgs = soup.find_all('div',class_=re.compile('msg')) for i in thr_msgs: print(i) first = i.selec ...
- [翻译] DXPopover
DXPopover A Popover mimic Facebook app popover using UIKit. 使用UIKit框架写了一个类似于Facebook的pop效果的动画. The c ...