前两篇文章分别讲了,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核心技术-多线程之引导概念的更多相关文章

  1. java核心技术-多线程之线程基础

    说起线程,无法免俗首先要弄清楚的三个概念就是:进程.线程.协程.OK,那什么是进程,什么是线程,哪协程又是啥东西.进程:进程可以简单的理解为运行在操作系统中的程序,程序时静态代码,进程是动态运行着的代 ...

  2. java核心技术-多线程基础

    进程.线程 ​ 进程(Process) 是程序的运行实例.例如,一个运行的 Eclipse 就是一个进程.进程是程序向操作系统申请资源(如内存空间和文件句柄)的基本单位.线程(Thread)是进程中可 ...

  3. java核心技术-多线程之线程内存模型

    对于每一种编程语言,理解它的内存模型是理所当然的重要.下面我们从jvm的内存模型来体会下java(不限java语言,严格来讲是JVM内存模型,所有JVM体系的变成语言均适用)的内存模型. 堆: 就是我 ...

  4. java核心技术-多线程之基本使用

    多线程程序好处就是可以提高cpu使用率和系统的性能.这里举个例子,民以食为天,咱们以餐馆为例(后面基本上都用餐馆作为对象),后面如果没有特殊说明均采用本节相关术语,围绕餐馆我们可以抽象出如下几个角色以 ...

  5. Java的多线程机制系列:(一)总述及基础概念

    前言 这一系列多线程的文章,一方面是个人对Java现有的多线程机制的学习和记录,另一方面是希望能给不熟悉Java多线程机制.或有一定基础但理解还不够深的读者一个比较全面的介绍,旨在使读者对Java的多 ...

  6. Java 多线程的基本概念

    一.线程介绍 多线程同时运行时,单CPU系统实际上是分给每个线程固定的时间片,用这种方式使得线程“看起来像是并行的”.在多CPU系统中,每个CPU可以单独运行一个线程,实现真正意义上的并行,但是如果线 ...

  7. java 并发多线程 锁的分类概念介绍 多线程下篇(二)

    接下来对锁的概念再次进行深入的介绍 之前反复的提到锁,通常的理解就是,锁---互斥---同步---阻塞 其实这是常用的独占锁(排它锁)的概念,也是一种简单粗暴的解决方案 抗战电影中,经常出现为了阻止日 ...

  8. java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)

    目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...

  9. JAVA之多线程概念及其几种实现方法优劣分析

    1. 多线程 程序:指令集,静态的概念 进程:操作系统调动程序,是程序的一次动态执行过程,动态的概念 线程:在进程内的多条执行路径 Ps:单核的话进程都是虚拟模拟出来的,多核处理器才可以执行真正的多线 ...

随机推荐

  1. logback配置文件---logback.xml详解

    一.参考文档 1.官方文档 http://logback.qos.ch/documentation.html 2.博客文档 http://www.cnblogs.com/warking/p/57103 ...

  2. Linux 中常用命令

    命令基本格式: 命令提示符:[root@localhost ~]#      root 代表当前的登录用户(linux当中管理员账号是root)      @ 无实际意义      localhost ...

  3. php下载远程大文件(获取远程文件大小)

    function download_file($url) { // $url = http://192.168.8.95/vm/download_file?downurl=http://192.168 ...

  4. Python进阶内容(一)--- 高阶函数 High order function

    0. 问题 # 本文将围绕这段代码进行Python中高阶函数相关内容的讲解 # 文中所有代码的兼容性要求为:Python 3.6,IPython 6.1.0 def addspam(fn): def ...

  5. 上传通用化 VHD 并使用它在 Azure 中创建新 VM

    本主题逐步讲解如何使用 PowerShell 将通用化 VM 的 VHD 上传到 Azure.从该 VHD 创建映像,然后从该映像创建新 VM. 可以上传从本地虚拟化工具或其他云导出的 VHD. 对新 ...

  6. 【Oracle】DBMS_STATS.GATHER_TABLE_STATS详解

    由于Oracle的优化器是CBO,所以对象的统计数据对执行计划的生成至关重要!    作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默认参数下是对表进行直 ...

  7. Connection to linux server with ORACLE SQL DEVELOPER

    1.Link name is random 2.username and password is database account 3.host name  is ip address  ifconf ...

  8. iPhone的设备名转换

    def convertDeviceName(self, deviceName): """ 转换deviceName(如iPhone 6,2)为用户习惯形式(如iPhone ...

  9. [TOP10]最受欢迎的10个Metasploit模块和插件

    很多人都想知道最受欢迎的10个Metasploit模块和插件是什么(TOP10),事实上这是一个很难回答的问题,因为什么才叫"Top"?我想每个人都有每个人的看法.于是我们通过调查 ...

  10. Apache Jemeter 开发插件

    为什么选择使用JMeter 当被问到这个问题的时候,也许你会在脑海里产生很多的理由,比如: Apache基金会下的开源项目,没有版权问题: 为数不多的还在持续更新的开源性能自动化测试工具: 支持协议丰 ...