并发

计算机用户想当然地认为他们的系统一次可以做不止一件事,他们设想他们可以继续在文字处理器中工作,而其他应用程序则下载文件、管理打印队列和流音频,即使是单个应用程序通常也希望一次完成多个任务。例如,流式音频应用程序必须同时从网络上读取数字音频、解压缩、管理回放并更新其显示,甚至文字处理器应始终准备好响应键盘和鼠标事件,无论重新格式化文本或更新显示有多繁忙,可以执行此类操作的软件称为并发软件。

Java平台的设计初衷是为了支持并发编程,在Java编程语言和Java类库中提供基本的并发支持,从5.0版开始,Java平台还包含高级并发API,本课程介绍了平台的基本并发支持,并总结了java.util.concurrent包中的一些高级API。

进程和线程

在并发编程中,有两个基本的执行单元:进程和线程,在Java编程语言中,并发编程主要涉及线程,但是,进程也很重要。

计算机系统通常具有许多活动进程和线程,即使在只有单个执行核心的系统中也是如此,因此在任何给定时刻只有一个线程实际执行,单个核心的处理时间通过称为时间切片的OS功能在进程和线程之间共享。

对于具有多个处理器或具有多个执行核心的处理器的计算机系统变得越来越普遍,这极大地增强了系统并发执行进程和线程的能力 — 但即使在没有多个处理器或执行核心的简单系统上,并发也是可能的。

进程

进程具有独立的执行环境,进程通常具有完整的私有基本运行时资源集,特别是,每个进程都有自己的内存空间。

进程通常被视为程序或应用程序的同义词,但是,用户看作的单个应用程序实际上可能是一组协作进程,为了促进进程之间的通信,大多数操作系统都支持进程间通信(IPC)资源,例如管道和socket,IPC不仅用于同一系统上的进程之间的通信,还用于不同系统上的进程。

Java虚拟机的大多数实现都作为单个进程运行,Java应用程序可以使用ProcessBuilder对象创建额外进程,多进程应用程序超出了本课程的范围。

线程

线程有时被称为轻量级进程,进程和线程都提供执行环境,但创建新线程所需的资源比创建新进程要少。

线程存在于进程中 — 每个进程至少有一个线程,线程共享进程的资源,包括内存和打开文件,这使高效但可能有问题的通信。

多线程执行是Java平台的基本特性,每个应用程序至少有一个线程 — 或几个,如果你计算执行内存管理和信号处理等任务的“系统”线程的话。但是从应用程序员的角度来看,你只从一个线程开始,称为主线程,该线程具有创建额外线程的能力,我们将在下一节中进行演示。

java进程和线程_Java™ 教程(进程和线程)相关推荐

  1. Linux进程的创建图文教程,进程的创建和终止(超详细)

    大多数系统的进程能够并发执行,它们可以动态创建和删除.因此,操作系统必须提供机制,用于创建进程和终止进程. 进程创建 进程在执行过程中可能创建多个新的进程.创建进程称为父进程,而新的进程称为子进程.每 ...

  2. java condition详解_Java使用Condition控制线程通信的方法实例详解

    Java使用Condition控制线程通信的方法实例详解 发布于 2020-4-20| 复制链接 摘记: 本文实例讲述了Java使用Condition控制线程通信的方法.分享给大家供大家参考,具体如下 ...

  3. java 停止一个线程_Java如何停止一个线程

    线程正常执行完毕,正常结束. 2.监视某些条件,直到某些条件成立,结束线程. class TestMyThread extends Thread { private volatile boolean ...

  4. java 镶嵌创建线程_Java多线程——之一创建线程的四种方法

    1.实现Runnable接口,重载run(),无返回值 package thread; public class ThreadRunnable implements Runnable { public ...

  5. java开发保险案例_Java实现双保险线程的示例代码

    双保险线程,每次启动2个相同的线程,互相检测,避免线程死锁造成影响. 两个线程都运行,但只有一个线程执行业务,但都会检测对方的时间戳 如果时间戳超过休眠时间3倍没有更新的话,则重新启动对方线程. 例子 ...

  6. java 关闭守护线程_Java并发编程之线程生命周期、守护线程、优先级、关闭和join、sleep、yield、interrupt...

    Java并发编程中,其中一个难点是对线程生命周期的理解,和多种线程控制方法.线程沟通方法的灵活运用.这些方法和概念之间彼此联系紧密,共同构成了Java并发编程基石之一. Java线程的生命周期 Jav ...

  7. java代码批量下载_Java代码实战:线程池实现批量下载文件

    今天技术之家陪你一起Java代码实战:线程池实现批量下载文件: 1 创建线程池package com.cheng.webb.thread; import java.util.concurrent.Ar ...

  8. java 事务管理 子父线程_Java中的父线程与子线程

    参考资料:https://my.oschina.net/hosee/blog/509557 结论:父线程的生命周期与子线程没有关系. 个人感觉:每个线程包括main线程(除了守护线程)都是平级关系,不 ...

  9. java记事本应用程序_Java教程:使用记事本编写运行Java程序

    Java教程经过上节的操作已经配置完了 Java 的开发环境,但并不清楚所配置的开发环境是否真的可以运行 Java 应用程序.为了解除这个疑虑,也为了使读者对开发 Java 应用程序的步骤有一个初步的 ...

最新文章

  1. 一文教会你写90%的shell脚本!
  2. linux pwm控制蜂鸣器 滴滴_兴安盟KOBISHI电磁蜂鸣器BZ-21BLAC24V保证
  3. Lasso回归的坐标下降法推导
  4. 完美解决:"library not found for - "
  5. Exchange2010配置实验(七)DAG配置实验
  6. 文件 在线压缩 技术
  7. php sql好处,关于php:使用Doctrine与SQL相比,使用DQL有什么好处?
  8. 读博士也有技巧:如何快乐地做研究
  9. Hibernate处理MySQL的时间
  10. html2canvas在iphone7 iphonex都生成不了
  11. javascript有关this的那些事(某渣提出的问题)
  12. 6.剑指Offer --- 面试中的各项能力
  13. 在C++上利用onnxruntime (CUDA)和 opencv 部署模型onnx
  14. 模拟电路——集成运算放大器(1)
  15. 平面广告创意设计4大原则
  16. Cisco Aironet系列AP的瘦胖转换
  17. windows桌面待办事项_提醒待办事项app哪个好用?苹果手机上有什么好用的提醒便签软件吗...
  18. 【不收藏一定后悔】超智能三子棋——和电脑比一把
  19. 明明已部署EDR,服务器为什么还是被入侵了?
  20. hibernate5.4+mysql8+java8实例

热门文章

  1. Vue中 $ref 的用法
  2. 前端学习(2327):angular之双向绑定
  3. “睡服”面试官系列第六篇之set数据结构(建议收藏学习)
  4. 前端学习(488):文本标签
  5. 前端学习(169):无语义元素
  6. html:(20):使用下拉框进行多选和使用提交按钮提交
  7. Linux的Qt编译出现:-1: error: cannot find -lGL问题的解决方法
  8. linux3.0-内核自带led驱动移植
  9. escape mysql_mysql_escape_string()函数用法分析
  10. js获取用户当前所在城市(ip)