多线程
ellen艾琳
这个作者很懒,什么都没留下…
展开
-
多线程 第十一节 锁总结
锁总结 这一节可以结合 第四节 Java 虚拟机对 synchronized 的优化 及 第三节中的锁优化一起学习 1、 乐观锁和悲观锁 乐观锁 CAS——ABA 问题:Java 提供了一个 AtomicStampedReference 原子引用变量,通过添加版本号来解决 ABA 的问题 悲观锁 Synchronized 2、 公平锁和非公平锁 ReentrantLock 3、 独占锁和共享锁 ReentrantRea...原创 2020-10-09 16:56:33 · 66 阅读 · 0 评论 -
多线程 第十节 Java 中的原子操作
Java 中的原子操作 1、 java.util.concurrent.atomic包下 2、 线程原子性操作:AtomicInteger 作为成员变量使用 3、 分类:原子更新基本类型、原子更新数组类型、原子更新引用类型、原子更新属性类型 import java.util.concurrent.atomic.AtomicInteger; public class AtomicIntegerTest { private static AtomicInteger at...原创 2020-10-09 16:43:03 · 98 阅读 · 0 评论 -
多线程 第九节 线程池
Thread Pool 1、 为了避免系统频繁的创建和销毁线程,我们可以将创建的线程进行复用。 2、 在线程池中总有那么几个活跃的线程,也有一定的最大值限制,一个业务使用完线程之后,不是立即销毁而是将其放入到线程池中,从而实现线程的复用。简而言之:创建线程变成了从线程池获取空闲的线程,关闭线程变成了向池子中归还线程。 3、 线程池优点: 1) 可重复使用已有线程,避免对象创建、消亡和过度切换的性能开销。 2) 避免创建大量同类线程所导致的资源过度竞争和内存溢...原创 2020-10-09 16:33:45 · 105 阅读 · 0 评论 -
多线程 第八节 线程间通信之Lock
Lock 1、 Lock 对象实现线程同步和线程间通信 2、 Lock 其实是一个接口,在 JDK1.5 以后开始提供,其实现类常用的有 ReentrantLock,这里所说的 Lock 对象即是指 Lock 接口的实现类,简称为 Lock 对象。 3、 使用 synchronized和Lock关键字实现同步功能 Lock 在使用时需要显式地获取和释放锁。拥有锁获取与释放的可操作性、可中断的获取锁、超时获取锁 synchronized 实现的隐式的获取所和释放锁 4、...原创 2020-10-09 10:53:47 · 269 阅读 · 0 评论 -
多线程 第七节 CountDownLatch 与 CyclicBarrier
CountDownLatch线程计数器 1、 CountDownLatch位于java.util.concurrent 包下,是一个非常实用的多线程控制工具类,称之为“倒计时器”,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。 2、 CountDownLatch 是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。 3、 C...原创 2020-10-09 07:51:14 · 142 阅读 · 0 评论 -
多线程 第六节 ThreadLocal
ThreadLocal 1、 ThreadLocal线程局部变量。 JDK 提供的 ThreadLocal 使每一个线程都有自己的局部变量。 2、 ThreadLocal 为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 3、 使用场景: 1) ThreadLocal 可以用来管理 Session,因为每个人的信息都是不一样的,所以就很适合用 ThreadLocal 来管理 2) 数据库连接...原创 2020-10-02 01:27:37 · 105 阅读 · 0 评论 -
多线程 第五节 线程间通信
wait/notify 线程间通信 1、Java 的一种实现线程间通信的机制是:wait/notify 线程间通信。wait() 方法实现线程等待,使用 notify()/notifyAll() 方法唤醒线程 2、应用场景:去银行办业务,进门之后取票号,等叫到号码的时候会广播通知我们办业务 3、wait 方法: 1) 在调用wait()之前,线程必须获得该对象级别锁(监视器),只能在同步方法或同步块中调用wait()方法。 2) 作用是使当前执行代码的线程等待,释放其对象...原创 2020-10-02 01:18:25 · 66 阅读 · 0 评论 -
多线程 第四节 Java 虚拟机对 synchronized 的优化
1、 synchronized 相对于 volatile 是重量了很多,因此在以前很让人诟病,但是从 JDK 1.6 版本以后为了减少获得锁和释放锁带来的性能消耗而引入了偏向锁和轻量级锁,以及锁的存储结构和升级过程。 2、 在 Java SE 1.6 中,锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态 3、 这四种状态会随着竞争情况逐渐升级。锁可以升级但不能降级 4、 这是因为,自旋锁无法预知到底会空循环几个时钟周期,并且会很消耗 CPU,为了避免这种无用的自旋操作,原创 2020-09-19 12:57:52 · 189 阅读 · 0 评论 -
多线程 第三节 Synchronized与Volatile
Synchronized解释 1、 Java 中的每个对象都有一个锁或者叫做监视器(monitor) ,当访问某个对象的 synchronized 方法时, 表示将该对象上锁 ,此时其他任何线程都无法再去访问该 synchronized 方法了, 直到之前的那个线程执行方法完毕后 ( 或者是抛出了异常) ,将该对象的锁释放掉,其他线程才有可能再去访问该 synchronized 方法。 2、 Synchronized:是同步关键字,对需要锁定的资源加上该关键字,即为同步监视器。Sy...原创 2020-09-19 12:49:40 · 134 阅读 · 0 评论 -
多线程 第二节 线程创建与线程安全
1、 线程间的互斥 在Java中,用互斥锁来保证共享数据操作的完整性。 可以在任意对象及方法上加锁,而加锁的这段代码称为互斥区或临界区。 2、 Synchronized的使用方式 3、 Synchronized 锁重入 最大的作用是避免死锁 可重入锁具有父子可继承性 4、 Java 虚拟机对 synchronized 的优化 在 Java SE 1.6 中,锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态 锁可以升级但...原创 2020-09-16 22:21:04 · 150 阅读 · 0 评论 -
多线程 第一节 基础知识
基础 1、进程: 执行中的程序 进程是线程的容器 是程序的实体 资源分配和调度的基本单位 2、 线程: 是来执行程序的 同一进程中的线程共用相同的地址空间 表示程序的执行流程 能够执行程序代码的一个执行单位 3、 一个进程至少要包含一个线程 同一进程下的线程共享全局变量、静态变量等数据 4、 线程的状态 新建- ...原创 2020-09-15 22:05:19 · 104 阅读 · 0 评论