五山口老法师

仰望星空,脚踏实地!

JVM:锁机制

理解锁的基础知识 如果想要透彻的理解java锁的来龙去脉,需要先了解以下基础知识。 基础知识之一:锁的类型 锁从宏观上分类,分为悲观锁与乐观锁。 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在...

2019-03-22 11:36:08

阅读数 64

评论数 0

多线程:同步和异步的优缺点比较

异步的使用场景: 1、不涉及共享资源,或对共享资源只读,即非互斥操作 2、没有时序上的严格关系 3、不需要原子操作,或可以通过其他方式控制原子性 4、常用于IO操作等耗时操作,因为比较影响客户体验和使用性能 5、不影响主线程逻辑 同步的使用场景:不使用异步的时候 同步的好处: 1、...

2019-03-10 23:40:34

阅读数 151

评论数 1

多线程:多线程优缺点、应用场景

首先说下多线程出现的原因: 为了解决负载均衡问题,充分利用CPU资源.为了提高CPU的使用率,采用多线程的方式去同时完成几件事情而不互相干扰.为了处理大量的IO操作(IO密集时,cpu利用率会下降)时或处理的情况需要花费大量的时间等等,比如:读写文件,视频图像的采集,处理,显示,保存等 多线程...

2019-03-10 23:35:25

阅读数 87

评论数 0

多线程:AQS的一些心得

AQS作为JUC并发组件实现的核心。全称是AbstructQueuedSynchronizer,也就是同步队列器。 其内部实现主要的是一个state状态标识和基于FIFO一个同步队列。 这个状态标识表明当前的资源是否是可以争取的,当state=0是,表示资源没有加锁;当state&...

2019-02-25 16:04:54

阅读数 59

评论数 0

多线程:AQS源码分析

AQS 源码分析   概述 Java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchronized还是存在一些缺陷的:虽然synchronized提供了便捷性的隐式...

2019-02-25 13:39:54

阅读数 57

评论数 0

多线程:happens-before 先行发生原则

下面就来具体介绍下happens-before原则(先行发生原则): 这8条规则中,前4条规则是比较重要的,后4条规则都是显而易见的。   下面我们来解释一下前4条规则:   对于程序次序规则来说,我的理解就是一段程序代码的执行在单个线程中看起来是有序的。注意,虽然这条规则中提到“书写在...

2019-02-18 22:54:27

阅读数 58

评论数 0

多线程:Immutable对象?如何创建Immutable对象?

那么什么是immutable objects?什么又是mutable Objects呢? immutable Objects就是那些一旦被创建,它们的状态就不能被改变的Objects,每次对他们的改变都是产生了新的immutable的对象,而mutable Objects就是那些创建后,状态可以...

2019-01-14 21:29:41

阅读数 62

评论数 0

多线程:当你提交任务时,线程队列已经满了,这时会发生什么?

  首先我调用Executors创建的线程池出来的对象是ThreadPoolExecutor,ScheduledThreadPoolExecutor,DelegatedExecutorService这三个类中的一个! 而ScheduledThreadPoolExecutor是ThreadPool...

2019-01-14 21:07:21

阅读数 1779

评论数 0

多线程:保证三个线程依次按顺序执行?newSingleThreadExecutor!!!

newSingleThreadExecutor 这个线程池,保证线程里面的任务依次执行,这让我发现了新大陆, 立马实践了一下,发现不负所望; public class TestJoin { public static void main(String[] args) throws I...

2019-01-14 20:45:57

阅读数 423

评论数 0

多线程:为什么wait()需要放在循环中?

举个栗子: synchronized (monitor) { // 判断条件谓词是否得到满足 while(!locked) { // 等待唤醒 monitor.wait(); } // 处理其他的业务逻辑 } 那为什么非要...

2019-01-14 20:06:01

阅读数 216

评论数 0

多线程:interrupted、isinterrupted区别

interrupted()是静态方法:内部实现是调用的当前线程的isInterrupted(),并且会重置当前线程的中断状态 isInterrupted()是实例方法,是调用该方法的对象所表示的那个线程的isInterrupted(),不会重置当前线程的中断状态 结论:interrupt方法是...

2019-01-14 19:56:16

阅读数 40

评论数 0

多线程:Vector是线程安全的吗

线程安全,在java的多并发编程中是重要概念,意思是,多个线程同时操作一个对象,在各种不同情况下,都不会造成不同的后果。 一个经典问题,Vector到底是不是线程安全的?   很多人都会回答,是,vector是线程安全的。 诚然,不止是很多IT教材上是这么写的,就连JDK的作者写的注释也是...

2019-01-14 17:06:18

阅读数 369

评论数 0

多线程:线程安全?如何实现?

多个线程不管以何种方式访问某个类,并且在主调代码中不需要进行同步,都能表现正确的行为。 线程安全有以下几种实现方式: 1)不可变 为什么是不可变? 不可变(Immutable)的对象一定是线程安全的,不需要再采取任何的线程安全保障措施。只要一个不可变的对象被正确地构建出来,永远也不会看到它...

2019-01-14 08:49:55

阅读数 42

评论数 0

多线程:一些好的编程建议

给线程起个有意义的名字,这样可以方便找 Bug。 缩小同步范围,从而减少锁争用。例如对于 synchronized,应该尽量使用同步块而不是同步方法。 多用同步工具少用 wait() 和 notify()。首先,CountDownLatch, CyclicBarrier, ...

2019-01-14 08:49:46

阅读数 27

评论数 0

多线程:了解一下ForkJoin、FutureTask、BlockingQueue

先了解一下这三种类 FutureTask 在介绍 Callable 时我们知道它可以有返回值,返回值通过 Future 进行封装。FutureTask 实现了 RunnableFuture 接口,该接口继承自 Runnable 和 Future 接口,这使得 FutureTask 既可以当做一...

2019-01-13 22:18:41

阅读数 65

评论数 0

多线程:并发实现方法之J.U.C

java.util.concurrent(J.U.C)大大提高了并发性能。 AQS 被认为是 J.U.C 的核心。 什么是AQS?  AQS是AbstractQueuedSynchronizer的简称。AQS提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架。 Countdow...

2019-01-13 21:59:15

阅读数 197

评论数 0

多线程:线程之间的协作(join、wait、notify、notifyAll、await、signal、signalAll)

当多个线程可以一起工作去解决某个问题时,如果某些部分必须在其它部分之前完成,那么就需要对线程进行协调。 join() 在线程中调用另一个线程的 join() 方法,会将当前线程挂起,而不是忙等待,直到目标线程结束。 对于以下代码,虽然 b 线程先启动,但是因为在 b 线程中调用了 a 线程的...

2019-01-13 21:46:47

阅读数 178

评论数 2

多线程:中断(interrupt、interrupted、executor)

一个线程执行完毕之后会自动结束,如果在运行过程中发生异常也会提前结束。 InterruptedException 通过调用一个线程的 interrupt() 来中断该线程,如果该线程处于阻塞、限期等待或者无限期等待状态,那么就会抛出 InterruptedException,从而提前结束该线程...

2019-01-13 21:30:17

阅读数 82

评论数 0

多线程:Executor、Sleep、Deamon、Yeild

Executor   Executor是接口,Executors是工厂类! Executor 管理多个异步任务的执行,而无需程序员显式地管理线程的生命周期。这里的异步是指多个任务的执行互不干扰,不需要进行同步操作。 主要有三种 Executor: CachedThreadPool:一...

2019-01-13 20:31:34

阅读数 39

评论数 0

多线程:什么是ThreadLocal?应用场景?

ThreadLocal(避免线程安全问题)   什么是ThreadLocal?    线程本地变量,也有些地方叫做线程本地存储,他代表一个线程局部变量。 为什么要ThreadLocal?     通过把数据放在ThreadLocal中就可以让每个线程创建一个该变量的副本。从而避免了并发访...

2019-01-13 20:08:42

阅读数 61

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭