Java核心技术第十二章 并发

多进程和多线程的区别:每个进程拥有组件的一整套变量,线程则共享数据,一个程序可以同时运行多个线程,则为多线程程序。

什么是线程

线程状态

1. 新建线程

2.可运行线程

调用start方法,线程处于可运行状态,可能正在运行也可能没有运行

3. 阻塞和等待线程

暂时不活动的

4. 终止线程

线程属性

中断的状态、守护线程、未捕获异常的处理器

1. 中断线程

中断不一定要终止,只是引起注意,被中断的线程可以决定如何响应中断。

2. 守护线程

3.线程名

可以用setName方法为线程设置任何名字

4. 未捕获异常的处理器

线程的run方法不能抛出任何检查型异常,但是,非检查型异常可能会导致线程终止。

5. 线程优先级

一个线程会继承构造它的那个线程的优先级

同步

1.竞态条件

同步存取

2.竞态条件详解

3.锁对象

有两种机制可以防止并发访问一个代码块,synchronized关键字,ReentrantLock类。

重入锁,线程可以反复获得已拥有的锁

4.条件对象

线程进入临界区后发现只有满足某个条件之后才能执行。可以使用一个条件对象来管理那些已经获得了一个锁却不能有效工作的线程。

一个锁对象可以有一个或多个关联的条件对象,

等待获得锁的线程和调用了await方法的线程存在本质上的不同,线程调用await方法,进入这个条件的等待集。

5. synchronized关键字

每个对象都有一个内部锁

6.同步块

进入一个同步块,可以获得java对象的锁。

使用一个对象的锁来实现额外的原子操作,客户端锁定

7.监视器概念

8. volatile字段

volatile关键字为实例字段的同步访问提供了一种免锁机制,如果声明一个字段为volatile,编译器和虚拟机会考虑该字段可能被另一个线程并发更新。

9. final变量

除非使用锁或volatile,否则无法从多个线程安全地读取一个字段。字段声明为final时,可以安全地访问一个共享字段。

10. 原子性

对共享变量除了赋值之外并不做其他操作,可以将这些共享变量声明为volatile。

11. 死锁

12. 废弃stop和suspend方法

13. 按需初始化

14. 线程局部变量

线程安全的集合

1. 阻塞队列

生产者线程向队列插入元素,消费者线程获取元素。使用队列可以安全地从一个线程向另一个线程传递数据。

2. 高效的映射、集和队列

这些集合使用复杂的算法,允许并发地访问数据结构的不同部分尽可能减少竞争。

3. 映射条目的原子更新

4. 并发散列映射的批操作

Java API为并发散列映射提供了批操作,即使有其他线程在处理映射,这些操作也能安全执行,批操作会遍历映射,处理遍历过程中找到的元素。

5. 并发集视图

想要一个很大的线程安全的集而不是映射

6. 写时拷贝数组

7. 并行数组算法

8. 较早的线程安全集合

任务和线程池

线程池中包含许多准备允许的线程,为线程池提供一个Runable,会有一个线程调用run方法,当run方法退出时,这个线程不会死亡,会留在池中为下一个请求提供服务。

1. Callable与Future

Runable封装了一个异步运行的任务,没有参数和返回值的异步方法。Callable有返回值,Callable接口是一个参数化类型,只有一个方法call.

Future保存异步计算的结果

2.执行器

执行器类有许多用来构造线程池的静态工厂方法

3. 控制任务组

invokeAny方法提交一个Callable对象集合中的所有对象,并返回某个已经完成任务的结果。

invokeAll方法提交一个Callable对象集合中的所有对象,这个方法会阻塞,直到所有任务都完成,并返回表示所有任务答案的一个Future对象列表。

4. fork-join框架

有些应用使用了大量线程,但大多数都是空闲的。

异步计算

1.可完成Future

如果有一个Future对象,需调用get来获得值,这个方法会阻塞,直到值可用。CompletableFuture类实现了Future接口,它提供了获得结果的另一种机制。你要注册一个回调(callback),一旦结果可用,就会(在某个线程中)利用该结果调用。

2.组合可完成Future

3.用户界面回调中的长时间运行任务

使用线程是为了提高程序的响应性。当程序需要做某些耗时的工作时,不能在用户界面线程完成这些工作,应该启动另一个工作线程。如果工作线程要执行长时间运行的任务,就不要从这样一个工作线程更新用户界面。

进程

执行另一个程序,使用ProcessBuilder和Process类

1.建立进程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/526695.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车协议学习

ⅠOBD 1.OBD接口 OBD有16个引脚,每个引脚的电压不同(可以对应不同的协议) 车端: 16- 9 (短一点点的) 8-1 (长一点的) 2.基于OBDⅡ的通信协议 CAN (ISO-15765&am…

NPP VIIRS卫星数据介绍及获取

VIIRS(Visible infrared Imaging Radiometer)可见光红外成像辐射仪。扫描式成像辐射仪,可收集陆地、大气、冰层和海洋在可见光和红外波段的辐射图像。它是高分辨率辐射仪AVHRR和地球观测系列中分辨率成像光谱仪MODIS系列的拓展和改进。VIIRS数…

代码随想录刷题笔记-Day33

1. 跳跃游戏 55. 跳跃游戏https://leetcode.cn/problems/jump-game/ 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 tru…

动态规划(算法竞赛、蓝桥杯)--数位DP度的数量

1、B站视频链接&#xff1a;E38 数位DP 度的数量_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N34; int a[N];//把B进制数的每一位抠出存入数组 int f[N][N];//f[i][j]表示在i个位置上&#xff0c;放置j个1的组合数 int K,B;void init(…

【Linux】线程同步与生产消费者问题

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;【LeetCode】winter vacation training 目录 &#x1f449;&#x1f3fb;CP问题&#x1f449;&#x1f3fb;互斥…

[LeetCode][LCR149]彩灯装饰记录 I——二叉树的层序遍历

题目 LCR 149. 彩灯装饰记录 I 给定一棵圣诞树&#xff0c;记作根节点为 root 的二叉树&#xff0c;节点值为该位置装饰彩灯的颜色编号。按照从左到右的顺序返回每一层彩灯编号。 示例 1&#xff1a; 输入&#xff1a;root [8,17,21,18,null,null,6] 输出&#xff1a;[8,17,…

类与对象-对象特性

师从黑马程序员 对象的初始化和清理 构造函数和析构函数 用于完成对象的初始化和清理工作 如果我们不提供构造和析构&#xff0c;编译器会提供编译器提供的构造函数和析构函数是空实现 构造函数&#xff1a;主要用于创建对象时为对象的成员属性赋值&#xff0c;构造函数由编…

如何获取用户请求的真实ip,并返回访问者的ip地理位置?node,vue

一、获取真实IP 方式1、前端调用免费公共接口获取 前端获取访问者的真实的外网ip,可以通过调用接口https://api.ipify.org/来获取。你也可以直接在网页上访问它来看自己的外网ip。 ipify介绍&#xff1a; ipify是一个免费的公共 API&#xff0c;用于获取设备的公共 IP 地址。…

杨辉三角(C语言)

杨辉三角 一.什么是杨辉三角 一.什么是杨辉三角 每个数等于它上方两数之和。 每行数字左右对称&#xff0c;由1开始逐渐变大。 第n行的数字有n项。 前n行共[(1n)n]/2 个数。 … 当前行的数上一行的数上一行的前一列的数 void yanghuisanjian(int arr[][20], int n) {for (int i…

简历--毕业论文

文章目录 MPLS VPN网络的设计与实施一、研究背景和意义二、研究内容2.1网络设计2.1.1 MPLS VPN配置思路2.1.2基本配置2.1.3 实验结果 三、结论其他 MPLS VPN网络的设计与实施 摘 要&#xff1a;本文选择研究对象是cisco的MPLS VPN网络&#xff0c;具有经济适用&#xff0c;扩展…

6. Gin集成redis

文章目录 一&#xff1a;连接Redis二&#xff1a;基本使用三&#xff1a;字符串四&#xff1a;列表五&#xff1a;哈希六&#xff1a;Set七&#xff1a;管道八、事务九&#xff1a;示例 代码地址&#xff1a;https://gitee.com/lymgoforIT/golang-trick/tree/master/14-go-redi…

【Leetcode】299. 猜数字游戏

文章目录 题目思路代码结果 题目 题目链接 你在和朋友一起玩 猜数字&#xff08;Bulls and Cows&#xff09;游戏&#xff0c;该游戏规则如下&#xff1a; 写出一个秘密数字&#xff0c;并请朋友猜这个数字是多少。朋友每猜测一次&#xff0c;你就会给他一个包含下述信息的提…