深入浅出Semaphore源码解析 Java

深入浅出Semaphore源码解析

Semaphore 通过permits的值来限制线程访问临界资源的总数,属于有限制次数的共享锁,不支持重入。 前提条件 在理解 Semaphore 时需要具备一些基本的知识: 理解AQS的实现原理 之前有写过一篇 《深入浅出AQS源码解析》 关于AQS的文章,对AQS原理不了解的同学可以先看一下 Semaphore源码解析 Semaphore 中有3个内部类,分别是...
阅读全文
深入理解JVM(③)再谈线程安全 Java

深入理解JVM(③)再谈线程安全

前言 我们在编写程序的时候,一般是有个顺序的,就是先实现再优化,并不是所有的牛P程序都是一次就写出来的,肯定都是不断的优化完善来持续实现的。因此我们在考虑实现高并发程序的时候,要先保证并发的正确性,然后在此基础上来实现高效。所以 线程安全 是高并发程序首先需要保证的。 线程安全定义 对于线程安全的定义可以理解为: 当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下...
阅读全文
从ReentrantLock到AQS的原理及应用 Java

从ReentrantLock到AQS的原理及应用

前言 Java并发包(JUC:java.util.concurrent)中提供了很多并发工具,这其中,很多我们耳熟能详的并发工具,ReentrantLock、Semaphore,它们的实现都用到了一个共同的基类--AbstractQueuedSynchronizer,简称AQS。AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的Reent...
阅读全文
JAVA多线程——并发 Java

JAVA多线程——并发

线程状态图: 图来自 Java线程的6种状态及切换(透彻讲解) 初始、就绪、运行、等待、阻塞(synchronized)、终止。 Thread.sleep(millis)一定时间后自动恢复执行, 不释放对象锁 。 Object.wait()直接 释放锁 ,一直等待,知道notify()唤醒。 Thread1.join()表示运行的线程阻塞自己,等待Thr...
阅读全文
SpringCloud- 第六篇 Hystrix参数配置(三) Java

SpringCloud- 第六篇 Hystrix参数配置(三)

1:概述 Hystrix使用Archaius作为配置属性的默认实现。官方配置文档: https://github.com/Netflix/Hy... 每个属性有四个优先级,依次增大: 1:代码的全局默认值 2:动态全局默认属性 可以使用全局属性文件来更改全局默认值。 3:代码实例默认 定义特定于实例的默认值,比如在HystrixComma...
阅读全文
Java知识点JUC总结 Java

Java知识点JUC总结

JUC:java.util.concurrent (Java并发编程工具类) 一般面试提问:面向对象和高级语法、Java集合类、Java多线程、JUC 和高并发、Java IO和 NIO 获取多线程的4种方法: 1.继承Thread类,重写run方法(其实Thread类本身也实现了Runnable接口) 2.实现Runnable接口,重写run方法 3.实现Callable...
阅读全文
[Java 并发]CopyOnWrite 了解吗? Java

[Java 并发]CopyOnWrite 了解吗?

CopyOnWrite 只是看字面意思就能看出来,就是在写入时复制 说得轻巧,写入时复制,具体是怎么实现的呢? 先来说说思想,具体怎么实现等下分析 CopyOnWrite 的思想就是:当向一个容器中添加元素的时候,不是直接在当前这个容器里面添加的,而是复制出来一个新的容器,在新的容器里面添加元素,添加完毕之后再将原容器的引用指向新的容器,这样就实现了写入时复制 你还记得在提到数据库...
阅读全文
Java 并发和多线程基础合集 Java

Java 并发和多线程基础合集

你背不下的书,总有人能背下来。你做不出的题,总有人能做出来。你愿意拖到明天的事,总有人今天就能做完。 1、多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然...
阅读全文
Java 线程池 ThreadPoolExecutor 八种拒绝策略浅析 Java

Java 线程池 ThreadPoolExecutor 八种拒绝策略浅析

  前言 谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的这个api,大大的简化了多线程代码的开发。而不论你用FixedThreadPool还是CachedThreadPool其背后实现都是ThreadPoolExecutor。ThreadPoolExecutor是一个典型的缓存池化设计的...
阅读全文
啃碎并发(六):Java 线程同步与实现 Java

啃碎并发(六):Java 线程同步与实现

前言 为何要使用Java线程同步?Java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时,将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。 但其并发编程的根本,就是使线程间进行正确的通信。其中两个比较重要的关键点,如下: Java中提供了很多线程同步操作,比如...
阅读全文
Loading...