多线程Multi-Thread 基础

线程概念

  线程就是程序中单独顺序的流控制。

  线程本身不能运行,它只能用于程序中。

  说明:线程是程序内的顺序控制流,只能使用分配给程序的资源和环境。

进程

  进程:执行中的程序。

  程序是静态的概念,进程是动态的概念。

  一个进程可以包含一个或多个线程。

  一个进程至少要包含一个线程。

线程与进程的区别

  多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响。

  线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换负担比进程切换的负担要小

  多线程程序比多进程程序需要更少的管理费用。

  进程是重量级的任务,需要分配给它们独立的地址空间,进程间通信是昂贵和受限的,进程间的转换也是很需要花费的。

  另一方面,线程是轻量级的选手,它们共享相同的地址空间并且共同分享同一个进程,线程间的通信是便宜的,线程间的转换也是低成本的。

单线程

  单个程序中只有一个线程就是单线程。  

  当程序启动运行时,就自动产生一个线程,主方法main就在这个主线程上运行。我们的程序都是由线程来执行的。

多线程

  多线程指在单个程序中可以同时运行多个不同的线程执行不同的任务。

  多线程编程的目的,就是“最大限度地利用CPU资源”,当某一线程的处理不需要占用CPU而只和IO等资源打交道时,让需要占用CPU的其他线程有机会获得CPU资源。从根本上说,这就是多线程编程的最终目的。

  一个程序实现多个代码同时交替运行就需要产生多个线程。

  CPU随机地抽出时间,让我们的程序一会做这件事情,一会做另外的事情。

  从宏观角度来看,多个线程在同时执行(宏观并行),但是微观上来看,处理器的个数决定了某一个时刻可以同时运行的最大线程数,如单核CPU某一时刻只能有一个线程在执行(微观串行),双核的CPU在某一个时刻,最多可以运行两个线程,可以做到微观并行。

Java中的多线程

  同其他大多数编程语言不同,Java内置支持多线程编程(Multithreaded Programming)。

  多线程程序包含两条或两条以上并发运行的部分,程序中每个这样的部分都叫做一个线程(Thread)。每个线程都有独立的执行路径,因此多线程是多任务处理的一种特殊形式。

  多任务处理被所有的现代操作系统所支持。然而,多任务处理有两种截然不同的类型:基于进程的基于线程的

  1.基于进程的多任务处理是更熟悉的形式。进程(process)本质上是一个执行的程序。因此基于进程的多任务处理的特点是允许你的计算机同时运行两个或更多的程序。

  举例来说,基于进程的多任务处理使你在运用文本编辑器的时候可以同时运行Java编译器。

  在基于进程的多任务处理中,程序是调度程序所分派的最小代码单位。

  2.而在基于线程(thread-based)的多任务处理环境中,线程是最小的执行单位。

  这意味着一个程序可以同时执行两个或者多个任务的功能。

  例如,一个文本编辑器可以在打印的同时格式化文本。

Java线程模型

  Java多线程的优点就在于取消了主循环/轮询机制。一个线程可以暂停而不影响程序的其他部分。

  多线程允许活的循环在每一帧间隙中沉睡一秒而不暂停整个系统。

线程组

  所有线程都隶属于一个线程组。那可以是一个默认线程组,也可以是一个创建线程时明确指定的组。

  说明:

  在创建之初,线程被限制到一个组里,而且不能改变到一个不同的组。

  若创建多个线程而不指定一个组,它们就会与创建它的线程属于同一个组。

参考资料

  圣思园张龙老师Java SE系列视频教程。

转载于:https://www.cnblogs.com/xuyatao/p/6896335.html

Java 多线程(一) 基础知识与概念相关推荐

  1. 给我十分钟带你过完java多线程所有基础知识

    目录: 1.并发并行与线程进程 2.认识CPU和主线程 3.多线程的三种创建方式 4.三种创建多线程方式的进一步探究和对比 5.匿名内部类的多线程创建 6.多线程内存的分析 7.深度了解线程run() ...

  2. java的一些基础知识(引用BlogJava 落花飞雪)

     java的一些基础知识(引用BlogJava 落花飞雪) <Practical Java>笔记 1. 声明是什么? String s = "Hello world!" ...

  3. java to go 基础知识与区别入土指南

    java to go 基础知识与区别入土指南 文章目录 java to go 基础知识与区别入土指南 @[toc] 基础篇 关于基础类型 关于复合数据类型 关于切片 关于Map 关于sync.map ...

  4. 【Java】【基础知识】【Java的基本使用】

    [Java][基础知识][Java的基本使用] 基于jdk8 仅个人理解,或有疏漏 基于 java疯狂讲义 第三版和第四版 java核心技术卷一 第十版和第十一版 廖雪峰java课程 一.基本数据与结 ...

  5. Java 网络编程基础知识

    Java 网络编程基础知识 基础概念 计算机网络的基本概念 ​ 网络:多台计算机使用网络设备互联在一起,计算机之间可以进行通信,这样就组成了一个计算机网络. ​ 网络设备:集线器(HUB),路由器,交 ...

  6. java 网络爬虫 正则表达式_【干货】Java网络爬虫基础知识

    原标题:[干货]Java网络爬虫基础知识 引言 Java 网络爬虫具有很好的扩展性可伸缩性,其是目前搜索引擎开发的重要组成部分.例如,著名的网络爬虫工具 Nutch 便是采用 Java 开发,该工具以 ...

  7. ArduPilot之开源代码基础知识Threading概念

    ArduPilot之开源代码基础知识&Threading概念 1. 源由 2. 基础知识 2.1 The timer callbacks 2.2 HAL specific threads 2. ...

  8. 黑马程序员 一、java 概述与基础知识

    获取更多资源关注Java帮帮IT资源分享网 一.黑马程序员-java 概述与基础知识 1.何为编程? 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果 的过程. 为了使 ...

  9. 《统计自然语言处理》读书笔记 一.基础知识及概念介绍

    最近准备学习自然语言处理相关的知识,主要参考<统计自然语言处理·宗成庆>和<Natural Language Processing with Python>,推荐大家阅读.第一 ...

  10. 计算机数据库管理基本知识,2015年计算机四级考试《数据库技术》基础知识:概念篇...

    2015年计算机四级考试<数据库技术>基础知识:概念篇 信息与数据 1. 信息.物质.能量是组成客观世界并促进社会发展的三大基本要素; 2. 信息(Information)--是客观世界事 ...

最新文章

  1. jquery easyUI分页dataGrid-Json
  2. windows下安装gevent
  3. PHP通过计算经纬度获取附近的数据信息
  4. 汇编语言学习——第四章 第一个汇编程序
  5. 风林火山win11 64位官方版iso镜像v2021.07
  6. 转:Socket在阻塞模式下的信息收发和文件接收
  7. 实现数组和List之间的相互转换
  8. werkzeug serving.run_simple
  9. 【GPU+ubuntu】Ubuntu下的Tensorflow-gpu等各种环境和包的安装
  10. FZOJ2110: Star
  11. 【干货】B站品牌营销指南.pdf(附100页pdf下载链接)
  12. Flask-认识flask
  13. 编译qt的oracle驱动,怎样编译Qt下的Oracle驱动
  14. Vijos P1911 珠心算测验【序列处理】
  15. 关于python字符编码_关于python文件的字符编码
  16. java Socket使用注意
  17. windows操作系统定时关机和取消定时关机命令
  18. 电脑未安装任何音频设备解决办法
  19. c++如何实现以任意数为底的对数(底数合法)log()
  20. 禅道 upgrade.php,zentao禅道安装升级

热门文章

  1. 给TreeView控件绑定数据
  2. Shel脚本-初步入门之《03》
  3. intellij自动生成构造函数
  4. Flink EventTime和Watermarks原理结合代码分析(转载+解决+精简记录)
  5. ERROR org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode: Exception in doCheckpoint
  6. django-allauth定制模板(转载)
  7. file does not start with RIFF id(python)
  8. 《机器学习》 周志华学习笔记第七章 贝叶斯分类器(课后习题)python 实现
  9. 图像处理理论(七)——LBP, Fisherface, Viola-Jones
  10. 计算机专业都学什么科,大学本科计算机专业都有什么科目?