进程:一个正在执行程序的实例,包括程序计数器,寄存器以及变量的当前值。在操作系统中,每一个进程都有其地址空间和控制线程。

地址空间:要保证多个应用程序同时处于内存中并且不互相影响,则需要解决两个问题:保护和重定位。目前的办法是创造一个新的内存抽象:地址空间。就像进程的概念创造了一类抽象的CPU以运行程序一样,地址空间为程序创造了一种抽象的内存。地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间独立于其他进程的地址空间。

线程:存在同一个地址空间存在多个控制线程的情况。线程是操作系统能够进行运算调度的最小单位,是进程中的实际运作单位。一个线程指的是进程中一个单一顺序的控制流。

在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。

多线程的好处 在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责I/O处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序的执行效率。

runnable:封装了代码执行序列的线程对象。

创建Runnable:实现Runnable接口的匿名类/lambda表达式。

创建线程:将Rannable对象作为Thread类的构造函数参数。直接继承Thread类,并重写run()。

// 通过Runnable传递到Thread类中
Runnable r = new Runnable() {@Overridepublic void run() {// work}
}
Thread t = new Thread(r);// 直接继承Thread类
Class MyThread extends Thread {@Overridepublic void run() {// work}
}
MyThread t = new MyThread();
复制代码

线程的5个特征:线程名称,存活标识,执行状态,优先级以及是否为守护进程。

线程的执行状态:NEW,RUNNABLE,BLOCKED,WAITTING,TIME_WAITTING,TERMINATED。

一些基本操作

线程的中断:interrupt(),interrupted(),isInterrupted()。

等待线程:join()方法,当一个线程启动另一个线程时,被启动的线程非常耗时,主线程调用join()方法,主线程会等待该线程完成工作再处理其结果。

class ThreadJoining extends Thread {@Overridepublic void run() {for (int i = 0; i < 2; i++) {try {Thread.sleep(500);System.out.println("C Current Thread: "+ Thread.currentThread().getName());} catch (Exception ex) {System.out.println("Exception has" +" been caught" + ex);}System.out.println(i);}}
}public class GFG {public static void main(String[] args) {// creating two threadsThreadJoining t1 = new ThreadJoining();ThreadJoining t2 = new ThreadJoining();ThreadJoining t3 = new ThreadJoining();// thread t1 startst1.start();// starts second thread after when// first thread t1 is died.try {System.out.println("A Current Thread: "+ Thread.currentThread().getName());t1.join();} catch (Exception ex) {System.out.println("Exception has " +"been caught" + ex);}// t2 startst2.start();// starts t3 after when thread t2 is died.try {System.out.println("B Current Thread: "+ Thread.currentThread().getName());t2.join();} catch (Exception ex) {System.out.println("Exception has been" +" caught" + ex);}t3.start();}
}
复制代码

result:

A Current Thread: main
C Current Thread: Thread-0
0
C Current Thread: Thread-0
1
B Current Thread: main
C Current Thread: Thread-1
0
C Current Thread: Thread-1
1
C Current Thread: Thread-2
0
C Current Thread: Thread-2
1
复制代码

在这个例子里是主线程等待被启动线程完成工作(死亡)才会处理接下来的工作。

线程睡眠:Thread.sleep() 暂时性停止执行。

欢迎关注:www.renrunyun.com

转载于:https://juejin.im/post/5bc4650c5188255c713cafac

[仁润云技术团队]并发编程-(1)基本概念相关推荐

  1. 仁润云丨网络小贷风控数据接口分析(多头借贷,芝麻信用)

    对于网络小贷平台而言,征信和风控是业务发展过程中的重要环节.网络小贷业务主要防范的是欺诈风险和信用风险,诸如借款人通过套现.伪造.冒领冒用.恶意透支等手段进行骗贷.此外,平台与平台之间信息不透明,用户 ...

  2. # 技术-202111-《并发编程的艺术》阅读笔记

    技术-202111-<并发编程的艺术> 创建时间: 2021/11/8 20:46 更新时间: 2022/8/22 19:31 作者: HelloXF 标签: 知识库 第一章 并发编程的挑 ...

  3. 性能测试监控指标及分析调优 | 京东云技术团队

    一.哪些因素会成为系统的瓶颈? 1.CPU,如果存在大量的计算,他们会长时间不间断的占用CPU资源,导致其他资源无法争夺到CPU而响应缓慢,从而带来系统性能问题,例如频繁的FullGC,以及多线程造成 ...

  4. 仁润云出品丨浅析传统风控与大数据风控

    1.传统风控方式 (1)资料审核评分卡--资料审核评分卡采用传统资料录入方式进行多维度人工审核,是传统风控的主要方式之一. 优势:房产.车辆等资产以及工作收入等多项资料清单证明,风控把控比较严格,很大 ...

  5. 万物云原生下的服务进化 | 京东云技术团队

    导读: 在万物云原生下的环境下,Java的市场份额也因耗资源.启动慢等缺点,导致在云原生环境里被放大而降低,通过这篇文章,读者可以更好地了解如何在云原生环境下通过升级相关版本和使用GraalVM打出原 ...

  6. 京东短网址高可用提升最佳实践 | 京东云技术团队

    作者:京东零售 郝彦军 什么是短网址? 短网址,是在长度上比较短的网址.简单来说就是帮您把冗长的URL地址缩短成8个字符以内的短网址. 当我们在腾讯.新浪发微博时,有时发很长的网址连接,但由于微博只限 ...

  7. 京东云专业安全服务介绍 | 京东云技术团队

    根据LogicMonitor发布的未来云服务趋势研究报告显示,到2020年,企业在各类云产品上的支出将高于其在一般IT服务成本六倍以上,与此同时,所有企业的工作量将有83%都在云上实现,各企业将继续加 ...

  8. 京东云高可用业务架构建设 | 京东云技术团队

    本文以 2022 年一个实际项目为基础,来演示在京东云上构建高可用业务的整个过程.公有云及私有云客户可通过使用京东云的弹性 IAAS.PAAS 服务,创建高可用.高弹性.高可扩展.高安全的云上业务环境 ...

  9. 基于AIGC的京东购物助手的技术方案设想 | 京东云技术团队

    灵感来源 随着AIGC的爆火,ChatGPT,GPT-4的发布,我作为一个算法工作者,深感AI发展的迅猛.最近,OpenAI的插件和联网功能陆续向用户公开,我也在第一时间试用了这些最新的功能.在Ope ...

最新文章

  1. Object类—复写equals方法,hashCode方法,toString方法
  2. 在 Go 语言中 Patch 非导出函数
  3. js与android webview交互
  4. 【Android优化篇】提升Activity加载速度的方法
  5. jquery的ajax全局事件和AJAX 请求正在进行时显示“正在加载”
  6. 2019Java查漏补缺(二)
  7. android键盘输出增加按键码
  8. Silverlight 2.0的了解
  9. 组织架构适配下的敏捷开发
  10. Linux的 7个运行级别
  11. Atitit.h5 web webview性能提升解决方案-----fileStrore缓存离线存储+http方案
  12. PFQ: a Linux kernel module for packet capturing on multi-core architectures
  13. 加密软件漏洞测试,加密软件漏洞评测系统
  14. Dash_API与必应翻译的综合使用
  15. Ubuntu 系列学习(四)ubuntu 22.04 安装 微信、QQ
  16. Attention UNet
  17. Redhat下载地址
  18. Xftp的下载、安装、使用
  19. 嵌入式系统的组成结构
  20. 微信小程序药店管理系统+后台管理系统|前后分离VUE

热门文章

  1. Adapter 如果客户需要使用某个类的服务,而这项服务是这个类用一个不同的接口提供的,那么,可以使用适配器模式为客户提供一个期望的接口...
  2. 镜像的使用(6-13)
  3. 【网络编程】网络协议简析
  4. spring securiy使用总结
  5. DataX实现oracle到oracle之间的数据传递
  6. SQLServer 2000中,存储过程和用户自定义函数具体的区别??
  7. python 基础 信息量很大很好,适合复习
  8. 如何修改音乐的匹配字数
  9. 教您用事务一次处理多条SQL语句
  10. android Launcher——ui框架