多任务

现代操作系统(windows,MacOS,Linux)都可以执行多任务:
多任务就是同时运行多个任务,例如同时开启钉钉、百度网盘、火狐、谷歌、ps等
操作系统执行多任务就是让多个任务交替执行,例如浏览器执行0.001秒,网盘执行0.001秒,钉钉执行0.001秒。因为任务的数量远远多余CPU的数量,因此任务也是交替执行的

进程、线程

进程(Process):一个任务就是一个进程。
线程(Thread):某些进程内部还需要同时执行多个子任务。例如word打字、拼写检查、打印等

进程和线程的关系:

  • 一个进程可以包含一个或多个线程(至少一个线程)

实现多任务的方法:

  • 多进程模式(每个进程只有一个线程)
  • 多线程模式(一个进程有多个线程)
  • 多进程+多线程模式(复杂度最高,一般不考虑)

多进程VS多线程

  • 创建进程比创建线程开销大(尤其是Windows)
  • 进程间通信比线程间通信慢
  • 多进程稳定性比多线程高
    * 多进程:一个进程崩溃不会影响其他的进程
    * 多线程:任何一个线程的崩溃会导致整个进程的崩溃

Java语言内置多线程支持:

  • 一个Java程序实际上是一个JVM进程
  • JVM用一个主线程来执行main()方法
  • 在main()方法中又可以启动多个线程

多线程编程的特点:

  • 多线程需要读写共享数据
  • 多线程经常需要同步。例如看电影,必须由一个线程播放视频,一个线程播放音频。2个线程需要协调运行。否则视频和音频会不同步。
  • 多线程编程的复杂度高,调试更困难

Java多线程编程的特点:

  • 多线程模型是Java程序最基本的并发模型
  • 网络、数据库、web等都是依赖多线程模型
  • 必须掌握Java多线程编程才能继续深入学习

转载于:https://www.cnblogs.com/csj2018/p/10909511.html

廖雪峰Java11多线程编程-1线程的概念-1多线程简介相关推荐

  1. 多线程编程之三——线程间通讯

    七.线程间通讯 一般而言,应用程序中的一个次要线程总是为主线程执行特定的任务,这样,主线程和次要线程间必定有一个信息传递的渠道,也就是主线程和次要线程间要进行通信.这种线程间的通信不但是难以避免的,而 ...

  2. C#多线程编程实例 线程与窗体交互

    C#多线程编程实例 线程与窗体交互 代码: public partial class Form1 : Form{//声明线程数组Thread[] workThreads = new Thread[10 ...

  3. 多线程编程(2): 线程的创建、启动、挂起和退出

    python多线程编程(2): 线程的创建.启动.挂起和退出 如上一节,python的threading.Thread类有一个run方法,用于定义线程的功能函数,可以在自己的线程类中覆盖该方法.而创建 ...

  4. 多线程编程、线程同步|安全和线程通信

    多线程编程 多线程的优势 线程在程序中是独立的.并发的执行流,与分隔的进程相比,进程中的线程之间的隔离程度要小.他们共享内存.文件句柄和其他每个进程应有的状态. 因为线程的划分尺度小于进程,使得多线程 ...

  5. 多线程编程:线程死锁的原因以及解决方法

    多线程编程:线程死锁的原因以及解决方法 关于线程死锁这个问题相信程序员在编写多线程程序时会经常遇到的一个经典问题,这种情况往往出现在多个线程同时对临界资源访问时所产生的. 属于临界资源的硬件有打印机. ...

  6. Python多线程编程之线程子类化

    Python多线程编程之线程子类化 基本思路 Threading模块简介 **MyThread**主要代码 实例 所有代码 运行结果 基本思路 导入Threading模块下的Thread类,将其子类化 ...

  7. python进阶 多线程编程 —— threading和queue库实现多线程编程

    python进阶 多线程编程 -- threading和queue库实现多线程编程) 摘要 多线程实现逻辑封装 模型参数选择实例 摘要 本文主要介绍了利用python的 threading和queue ...

  8. java多线程同步与死锁,廖雪峰Java11多线程编程-2线程同步-3死锁

    在多线程编程中,要执行synchronized块,必须首先获得指定对象的锁. 1.Java的线程锁是可重入的锁 public void add(int m){ synchronized (lock){ ...

  9. 廖雪峰Java11多线程编程-3高级concurrent包-4Concurrent集合

    Concurrent 用ReentrantLock+Condition实现Blocking Queue. Blocking Queue:当一个线程调用getTask()时,该方法内部可能让给线程进入等 ...

最新文章

  1. 三维视觉惯性SLAM的有效Schmidt-EKF
  2. android WebView中js的alert()失效
  3. Android建造者模式初探(Toast工具类的进一步封装)
  4. 负载均衡服务器nginx详细安装教程及网络部署
  5. mysql分组区某列最后一条_[MySQL]MySQL数据库如何按某列分组排序后查询每个分组的最后一条数据?...
  6. Eclipse For JavaSE安装、配置、测试
  7. java学习(75):GUL文本框和标签
  8. Android开发笔记(四十八)Thread类实现多线程
  9. JS 操作 HTML 和 AJAX 请求后台数据
  10. 整合DZ .net论坛与.net整合。
  11. 美国基金教父约翰博格传记(1)
  12. coreseek mysql_coreseek,php,mysql全文检索部署(一)-阿里云开发者社区
  13. laravel添加语言包
  14. linux下dbf是什么文件,dbf是什么文件?dbf文件怎么读取
  15. Java编写杨辉三角
  16. 鸿蒙生态菁英难,重磅!华为联合西工大开设“鸿蒙生态菁英班”!
  17. springboot集成phoenix,操作hbase
  18. (六)Activiti之实现学生请假流程
  19. C#实现拉格朗日、牛顿、Hermite插值
  20. 【论文阅读--实时语义分割】BiSeNet V2: Bilateral Network with Guided Aggregation

热门文章

  1. antd table动态表头_ant-design动态表头
  2. CAD二次开发--像纬地与CASS程序一样双击桌面图标实现插件的自动挂载(不用netload也不用进入后输入挂载命令)
  3. (附源码)springboot幼儿园管理系统 毕业设计 160901
  4. 坚持建设国家自主信息体系,龙芯中科胡伟武“419”论坛畅谈LoongArch生态建设蓝图...
  5. 证照之星软件2020免费版PS做证件照的方法教程
  6. 对合同履行地约定没有约定或者约定不明确要怎么办
  7. Java基础-基于控制台的黑马学生老师管理信息系统
  8. C# 动态生成RDLC报表文件
  9. 选择低功率MCU需考虑外设功耗与电源管理
  10. 2020年电工(中级)实操考试视频及电工(中级)操作证考试