专栏首页星尘的一个朋友读书笔记《Java并发编程的艺术 - 方腾飞》- Java并发编程

读书笔记《Java并发编程的艺术 - 方腾飞》- Java并发编程

Java 并发编程

为什么要使用并发编程 (多线程)

  1. 科技的发展, 越来越多的机器拥有更多的处理器核心
  2. 多线程可以带来更快的响应速度
  3. 更好的编程模型

什么是线程

首先我们所写的 Java EE 程序在启动后, 会开启一条进程来执行我们的代码. 而其中的每个逻辑处理, 就是由线程去完成的.

线程是现代操作系统所能调度的最小单元.

线程的优先级

在Java中, 我们可以通过 priority 属性来设置线程的优先级, 参数为 1 ~ 10 参数越大, 代表优先级越高, 默认的优先级为 5

而这一参数在不同的虚拟机上, 在不同的操作系统上都会有不同的表现, 甚至被忽略

知识点: 不能依赖此值来设计线程的优先顺序, 并没有绝对意义.

线程的状态

  1. 初始状态, 线程被构建, 没有调用start方法
  2. 运行状态, Java 将操作系统的线程"就绪"和"运行"状态统一称为"运行中"
  3. 阻塞状态, 线程处于阻塞时
  4. 等待状态, 线程进入等待状态, 此时需要等待其他线程一些动作(通知或中断)
  5. 超时等待状态, 此状态不同于等待状态是可以在一定时间内自动返回
  6. 终止状态, 表示该线程已经执行完毕

守护线程 Daemon

负责程序运行的一个支持性工作, 当虚拟机中不存在非 Daemon 线程的时候虚拟机将会退出.

可以通过 setDaemon(true) 来指定守护线程, 该参数必须在线程启动前设置, 启动后设置无效.

我来理解这个绕脑的家伙, 如果一个线程设置了 setDaemon(true), 那就说明他是一个支持线程, 如果没有人需要他的时候, 他自然也就跟着退出了, 否则就会一直存在. 与启动他的线程共存. 他只是用来配合的, 没人需要的时候即退出.

知识点 : 在守护线程中不能使用 try catch finally { doSomeThing} , 因为当主线程退出后, 守护线程会立即退出, 并不会执行 finally 代码块内容

线程的创建

child线程是由 parent 线程进行空间分配, 同时会集成 parent 线程的优先级、守护线程状态、可以继承 parent 线程的 ThreadLocal

建议:为自己创建的线程分配一个名字,不需要多响亮,为的是解决问题时更容易认出他

线程中断

线程中断是线程中的一个标识位, 他表示一个线程是否被中断。

通过调用线程的 interrupted()方法可以查看线程是否处于中断状态

线程间通信

通过锁对象的 wait() 方法来释放锁, 同时进入等待队列;

通过锁对象的 notify()方法来唤醒等待队列的一个元素进入阻塞队列;

通过岁对象的notifyAll() 方法来唤醒等待队列的全部元素进入阻塞队列;

当调用了锁对象的 wait() 方法, 从等待队列被唤醒, 并重新获取到锁时, 将从等待地方开始, 程序计数器+1 , 继续执行下一条指令.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 读书笔记《Java并发编程的艺术 - 方腾飞》- 并发的两个‘老‘问题

    上一篇文章我们认识了什么是并发编程,随着并发编程而来的则是并发带来的各种问题,死锁和资源问题,那这一篇我们继续跟着作者去看一看这两个‘老‘问题。

    星尘的一个朋友
  • 读书笔记《Java并发编程的艺术 - 方腾飞》- Java内存模型

    而我们这里要记录的则是 Java 线程间通信使用的 共享内存, 也就是 Java 的内存是怎么样子的

    星尘的一个朋友
  • 读书笔记《Java并发编程的艺术 - 方腾飞》- 初识并发编程

    我一般讲什么东西都喜欢用简单的理解去讲,而不是去按部就班。教材中有明确的字样对某些知识点的概况,但你去理解要理解很多新的内容,如果是具体的内容还好,如果是抽象的...

    星尘的一个朋友
  • 多线程

    进程:是一个正在执行中的程序。 每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。 线程:就是进程中的一个独立的控制单元。 线程在控制...

    小二三不乌
  • 100道Java并发和多线程基础面试题大集合(含解答),这波面试稳了~

    这些多线程的问题来源于各大网站,可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回...

    程序员白楠楠
  • 面试必考——线程池原理概述

    线程池的源码解析较为繁琐。各位同学必须先大体上理解线程池的核心原理后,方可进入线程池的源码分析过程。

    黑洞代码
  • 全链路跟踪(压测)必备基础组件之线程上下文“三剑客”

    说起本地线程变量,我相信大家首先会想到的是JDK默认提供的ThreadLocal,用来存储在整个调用链中都需要访问的数据,并且是线程安全的。由于本文的写作背景是...

    丁威
  • 你真的懂线程池吗

    为什么需要线程池呢,没想明白这个问题,看再多线程池的源码都没有用,先要知道线程池技术解决了什么问题,才能看的懂源码,因为所有的代码都是为了解决实际的工程问题。

    方丈的寺院
  • Java多线程和线程池

    在java中,如果每个请求到达就创建一个新线程,开销是相当大的。在实际使用中,服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际...

    Java编程指南
  • 图文介绍进程和线程的区别

    先了解一下操作系统的一些相关概念,大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制...

    趣学程序-shaofeer

扫码关注云+社区

领取腾讯云代金券