多线程
文章平均质量分 90
hellozhxy
这个作者很懒,什么都没留下…
展开
-
Java 异步编程:从 Future 到 Loom
众所周知,Java 开始方法执行到结束,都是由同一个线程完成的。这种方式虽易于开发调试,但容易因为锁、IO 等原因导致线程挂起,产生线程上下文切换。随着对应用并发能力要求越来越高,频繁的线程上下文切换所带来的成本变得难以忽视。同时,线程也是相对宝贵的资源,无限制的增加线程是不可能的。优秀的技术人员应该能让应用使用更少的线程资源实现更高的并发能力。这便是我们今天要讨论的话题 —— Java 异步编程技术。异步编程其实并没有清晰定义。通常我们认为,从方法开始到结束都必须在同一个线程内调度执行的编程方式可被认转载 2021-07-30 10:31:00 · 1362 阅读 · 0 评论 -
什么是协程?
这几天一直在看协程相关的介绍,自动驾驶系统Apollo中使用了协程作为底层调度单元,那么协程究竟是如何工作的呢?通过本文你可以了解到,为什么需要协程?以及使用协程有哪些注意事项?为什么需要协程?我们都知道多线程,当需要同时执行多项任务的时候,就会采用多线程并发执行。拿手机支付举例子,当收到付款信息的时候,需要查询数据库来判断余额是否充足,然后再进行付款。假设最开始我们只有可怜的10个用户,收到10条付款消息之后,我们开启启动10个线程去查询数据库,由于用户量很少,结果马上就返回了。第2天用户增加转载 2021-07-29 15:26:53 · 200 阅读 · 0 评论 -
Java多线程(一)之volatile深入分析
volatile 变量提供了线程的可见性,并不能保证线程安全性和原子性。 什么是线程的可见性: 锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的...转载 2018-07-25 14:49:29 · 132 阅读 · 0 评论 -
Java多线程(二)之Atomic:原子变量与原子类
一、何谓Atomic? Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。计算机中的Atomic是指不能分割成若干部分的意思。如果一段代码被认为是Atomic,则表示这段代码在执行过程中,是不能被中断的。通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中断,直到其执行完成) 在x86 平台上,CPU提供了在指令执行期间对总线加锁的...转载 2018-07-25 16:19:33 · 172 阅读 · 0 评论 -
Java多线程(七)之同步器基础:AQS框架深入分析
一、什么是同步器 多线程并发的执行,之间通过某种 共享 状态来同步,只有当状态满足 xxxx 条件,才能触发线程执行 xxxx 。 这个共同的语义可以称之为同步器。可以认为以上所有的锁机制都可以基于同步器定制来实现的。 而juc(java.util.concurrent)里的思想是 将这些场景抽象出来的语义通过统一的同步框架来支持。juc 里所有的这些锁机制都是基...转载 2018-07-17 17:39:55 · 245 阅读 · 0 评论 -
Java多线程(十一)之线程池深入分析(上)
线程池是并发包里面很重要的一部分,在实际情况中也是使用很多的一个重要组件。下图描述的是线程池API的一部分。广义上的完整线程池可能还包括Thread/Runnable、Timer/TimerTask等部分。这里只介绍主要的和高级的API以及架构和原理。大多数并发应用程序是围绕执行任务(Task)进行管理的。所谓任务就是抽象、离散的工作单元(unit of work)。把一个应用程序的工...转载 2018-07-26 19:59:09 · 157 阅读 · 0 评论 -
Java多线程(十二)之线程池深入分析(下)
一、数据结构与线程构造方法 由于已经看到了ThreadPoolExecutor的源码,因此很容易就看到了ThreadPoolExecutor线程池的数据结构。图1描述了这种数据结构。图1 ThreadPoolExecutor 数据结构其实,即使没有上述图形描述ThreadPoolExecutor的数据结构,我们根据线程池的要求也很能够猜测出其数据结构出来。线程池需要支持多个...转载 2018-07-26 20:14:28 · 162 阅读 · 0 评论 -
Java多线程(十)之ReentrantReadWriteLock深入分析
一、ReentrantReadWriteLock与ReentrantLock 说到ReentrantReadWriteLock,首先要做的是与ReentrantLock划清界限。它和后者都是单独的实现,彼此之间没有继承或实现的关系。ReentrantLock 实现了标准的互斥操作,也就是一次只能有一个线程持有锁,也即所谓独占锁的概念。前面的章节中一直在强调这个特点。显然这个特...转载 2018-07-27 20:36:59 · 146 阅读 · 0 评论