多线程并发Thread
文章平均质量分 94
流烟默
这个作者很懒,什么都没留下…
展开
-
项目性能参数和概念QPS&TPS
并发量、吞吐量、并发用户数据、pv、 uv、平均停留时长、跳出率、 平均响应时间、QPS、RPS、TPS。。。① 并发量即系统同时处理事务的能力,通常我们用QPS(query per second 每秒查询)来表示,也有地方用RPS(request per second 每秒请求),TPS(吞吐量,准确来说应该是吞吐率)来表示.但其实我们拿到的qps/tps/rps等大多都是1s内的处理能力...原创 2019-01-08 16:51:51 · 1387 阅读 · 0 评论 -
队列同步器AQS-AbstractQueuedSynchronizer 原理分析
【1】AQS 简单介绍AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。其是AbstractOwnableSynchronizer的子类:AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸...原创 2018-12-06 11:12:15 · 1603 阅读 · 0 评论 -
多线程并发之CyclicBarrier(栅栏)使用详解
【1】CyclicBarrier简介CyclicBarrier,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类。翻译为中文为“篱栅”意思,也就是栅栏。① JavadocCyclicBarrier是一个同步辅助类,它允许一组线程相互等待直到所有线程都到达一个公共的屏障点。CyclicBarrier在涉及一定大小的线程的程序而这些线程有时必须彼此等待的情况下...原创 2018-12-26 14:44:09 · 5717 阅读 · 0 评论 -
多线程并发之volatile的底层实现原理
上篇博文从内存可见性看Volatile、原子变量和CAS算法提到了volatile保证内存可见性和CAS算法。本篇博文着重学习volatile的底层实现原理。【1】回顾volatilevolatile相当于是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。通俗点讲就是说一个变量如果用vo.........转载 2018-12-28 10:29:53 · 3771 阅读 · 0 评论 -
多线程并发之Semaphore(信号量)使用详解
专题相关文章:从内存可见性看Volatile、原子变量和CAS算法多线程并发之CountDownLatch(闭锁)使用详解多线程并发之显示锁Lock与其通信方式Condition源码解读多线程并发之读写锁(ReentranReadWriteLock&ReadWriteLock)使用详解多线程并发之线程池Executor与Fork/Join框架多线程并发之JUC 中的 Atomi...原创 2019-01-02 17:04:03 · 27634 阅读 · 0 评论 -
一文读懂Synchronized的实现原理
在多线程并发编程中 Synchronized 一直是元老级角色,很多人都会称呼它为重量级锁,但是随着 Java SE1.6 对 Synchronized 进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了 Java SE1.6 中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必...转载 2019-01-14 22:07:02 · 1210 阅读 · 1 评论 -
认真学习Java中线程实现和调度
并发不一定要依赖多线程(如PHP中很常见的多进程并发),但是在Java里面谈论并发,大多数与线程脱不开关系。线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。主流的操作系统都提供了线程实现,Java语言则提供了在不同硬件和操作系统平台下对线程操作的统一处理,每个已经执行start()且还未结束的java.lang.Thread类的实例就代表了一个线程。thread原创 2019-02-03 18:53:32 · 709 阅读 · 0 评论 -
深入学习线程局部变量ThreadLocal
ThreadLocal是线程局部变量,和普通变量的不同在于:每个线程持有这个变量的一个副本,可以独立修改(set方法)和访问(get方法)这个变量,并且线程之间不会发生冲突。类中定义的ThreadLocal实例一般会被private static修饰,这样可以让ThreadLocal实例的状态和Thread绑定在一起。业务上,一般用ThreadLocal包装一些业务ID(user ID或事务ID...转载 2019-01-29 15:45:42 · 1996 阅读 · 0 评论 -
进程间通信和线程间通信总结
写在前面面试的时候一定不要疲劳战,比如上午面了一个,然后中午不休息直接赶到另外一个相距比较远的公司,影响状态。面试的时候一定不要紧张,不管对方有几个人,总之面试的时候做好充分准备,休息好,放松心态。好了,言归正传,开始总结。【1】进程间通信方式进程间通信又称IPC(Inter-Process Communication),指多个进程之间相互通信,交换信息的方法。根据进程通信时信息量大小的...原创 2019-02-16 16:06:57 · 14413 阅读 · 1 评论 -
线程间通信之Object.wait/notify实现
核心有这样几个关键字:锁,monitor以及指令。PS:遇到面试官问的问题不是你曾经考虑的问题不要怕,不要紧张。可能只是说法变了,但是知识还是哪些知识!waiting…...原创 2019-02-16 21:59:22 · 613 阅读 · 0 评论 -
JUC 中的 Atomic 原子类总结
继该篇博文从内存可见性看Volatile、原子变量和CAS算法后继续学习JUC中的原子类。【1】原子类概述Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。所以,所谓原子类说简单点就是具有原子/原子操作特征的...转载 2018-12-05 16:42:57 · 1951 阅读 · 0 评论 -
多线程并发之线程池Executor与Fork/Join框架
【1】常见接口和实现类① 什么是线程池首先可以联想一下数据库连接池,Redis中的pool。线程池提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。② 常见的体系结构常见的线程池体系结构: java.util.concurrent.Executor : 负责线程的使用与调度的根接口 |--ExecutorService 子接口: 线...原创 2018-09-28 19:16:22 · 4602 阅读 · 0 评论 -
Thread入门与线程方法详解及多线程安全
线程的生命周期如下图:其中wait()和notify(),notifyAll()是Object类的方法,sleep()和yield()是Thread类的方法。线程方法说明1、sleep()使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步块,即使sleep了其他线程仍然不能访问共享数据。注意该方法要捕捉异常。原创 2016-09-29 11:18:35 · 1799 阅读 · 0 评论 -
多线程时Autowired自动注入问题
首先需要知道的是,容器中的组件,也就是你添加了诸如@Component , @Service , @Controller以及@Repository等等注解,在容器启动的时候是会扫描标注这些注解的类创建bean并放入容器中。如果该类中的成员变量上使用了诸如@Autowired和@Resource注解时,容器将会找对应的bean并注入–依赖注入。而在多线程实例中使用@Autowired注解有时...原创 2018-07-12 12:29:01 · 9330 阅读 · 1 评论 -
多线程并发之CountDownLatch(闭锁)使用详解
【1】CountDownLatch是什么CountDownLatch,英文翻译为倒计时锁存器。是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。闭锁可以延迟线程的进度直到其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完成才继续执行:确保某个计算在其需要的所有资源都被初始化之后才继续执行;确保某个服务在其依赖的所有其他服务都已经启动之后才...原创 2018-09-16 11:24:52 · 20960 阅读 · 1 评论 -
多线程创建方式三 - 实现Callable接口
Java 5.0 在java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口。Callable 接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是Runnable 不会返回结果,并且无法抛出经过检查的异常。Callable接口示例如下:public class TestCallable { public...原创 2018-09-16 15:46:16 · 1200 阅读 · 0 评论 -
多线程并发之显示锁Lock与其通信方式Condition源码解读
【1】显示锁和隐式锁在Java 5.0 之前,协调共享对象的访问时可以使用的机制只有synchronized 和volatile 。Java 5.0 后增加了一些新的机制,但并不是一种替代内置锁的方法,而是当内置锁不适用时,作为一种可选择的高级功能。即,显示锁(同步锁)-Lock。用户解决多线程安全问题的三种方式:synchronized同步代码块;synchronized同步方法...原创 2018-09-16 16:33:18 · 2001 阅读 · 0 评论 -
从内存可见性看volatile、原子操作和CAS算法
内存可见性(Memory Visibility)是指当某个线程正在使用对象状态而另一个线程在同时修改该状态,需要确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化。那么如果一个线程修改了对象状态,其他线程看不到对象的状态变化怎么办?就会引起内存可见性错误!......原创 2016-10-18 08:45:06 · 5958 阅读 · 3 评论 -
线程间通信实例之轮流打印ABC
需求一,三个线程轮流打印ABC,每个线程打印十次,ABC分别为线程名字效果如下:AAAAAAAAAA//BC依次排列使用synchronized、wait、notifyAll实例代码如下:public class TestSwapThread { public static void main(String[] args){ //创建...原创 2018-09-17 17:13:04 · 579 阅读 · 0 评论 -
浅谈从fail-fast机制到CopyOnWriteArrayList使用
在ArrayList、HashMap和HashSet等集合的Javadoc中,你会看到类似如下注释:图片来源于ArrayList的javadoc 第一段翻译如下:waiting..原创 2018-09-13 18:00:17 · 1229 阅读 · 1 评论 -
多线程并发之读写锁(ReentranReadWriteLock&ReadWriteLock)使用详解
【1】基本讲解与使用ReadWriteLock同Lock一样也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个资源可以被多个线程同时读,或者被一个线程写,但是不能同时存在读和写线程。使用场景假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。...原创 2018-09-20 16:56:41 · 29425 阅读 · 4 评论 -
多线程循环交替输出1-100的两种方式
//线程通信。如下的三个关键字使用的话,都得在同步代码块或同步方法中。//wait():一旦一个线程执行到wait(),就释放当前的锁。//notify()/notifyAll():唤醒wait的一个或所有的线程//使用两个线程打印 1-100. 线程1, 线程2 交替打印class PrintNum extends Thread { static int num = 1; s原创 2016-11-01 23:36:02 · 4643 阅读 · 0 评论