ScheduledExecutorService 处理定时和周期性任务的强大工具
摘要:转:https://zhuanlan.zhihu.com/p/679339926 1 简介 ScheduledExecutorService是Java中处理定时和周期性任务的强大工具,它简化了线程管理,自动分配线程资源,避免了手动创建线程的繁琐,它提供了定时和周期性任务调度功能,能满足多数场景,此外
阅读全文
分布式id的方案
摘要:1 简介 在分布式系统架构中,通常会涉及到分布式全局唯一ID的生成 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。 如在金融、电商、支付、等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求,此时一个能够生成全局唯一ID
阅读全文
BIO和NIO的基本用法和API讲解
摘要:1 BIO 可以理解为Blocking IO 是同步阻塞的IO,也就是说,当有多个请求过来的时候,请求会呈现为链状结构,遵循先进先出的原则 1.1 单线程版本 1.1.1 服务端 //服务端单线程处理 public class BioServer { public static void main(
阅读全文
Disruptor
摘要:参考:https://blog.csdn.net/zhouzhenyong/article/details/81303011 ;https://www.jianshu.com/p/78160f213862 1 简介 Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内
阅读全文
线程基础知识18 线程池
摘要:1 什么是线程池 线程池其实就是一种多线程处理形式,把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销。 2 为什么使用线程池 2.1 场景 for (int i = 0; i < 100; i++) { new Thread(() -> { System.
阅读全文
线程基础知识17 Quene
摘要:1 ConcurrentLinkedQueue 1.1 简介 它是一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序。 新的元素插入到队列的尾部,队列获取操作从队列头部获得元素。 当多个线程共享访问一个公共 collection 时,ConcurrentLinke
阅读全文
线程基础知识12-AQS
摘要:转:https://tech.meituan.com/2019/12/05/aqs-theory-and-apply.html 1 简介 AQS,全称AbstractQueuedSynchronizer,是一个抽象的队列同步器。是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石,J
阅读全文
线程基础知识16-线程相关类CyclicBarrier、Semaphore、Exchanger
摘要:1 CyclicBarrier 1.1 作用 从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。 它的作用就是会让所有线程都等待完成后才会继续下一步行动 1.2 示例 //等待指定数量的线程await之后,执行一个runnable。并且await的线程继续执
阅读全文
线程基础知识15-StampedLock
摘要:1 简介 StampedLock是JDK1.8中新增的一个读写锁,也是对JDK1.5中的读写锁ReentrantReadWriteLock的优化。在原先读写锁的基础上新增了一种叫乐观读(Optimistic Reading)的模式。该模式并不会加锁,所以不会阻塞线程,会有更高的吞吐量和更高的性能。
阅读全文
线程基础知识14 ReentrantLock和ReentrantReadWriteLock
摘要:1 简介 ReentrantLock和ReentrantReadWriteLock都是可重入锁。可重入锁,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁 ReentrantLock和ReentrantReadWriteLock都支持获取锁时的公平和非公平性选择。默认是非公平
阅读全文
线程基础知识13-死锁
摘要:1 死锁是什么 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程 2 死锁演示 public class SiSuoTest { public
阅读全文
线程基础知识11-原子类
摘要:1 简介 java中提供了一些原子类,原子类包装了一个变量,并且提供了一系列对变量进行原子性操作的方法。我们在多线程环境下对这些原子类进行操作时,不需要加锁,大大简化了并发编程的开发。 目前Java中提供的原子类大部分底层使用了CAS锁(CompareAndSet自旋锁),如AtomicIntege
阅读全文
线程基础知识10-volatile
摘要:1 简介 Volatile保证了可见性和有序性,没有保证原子性。 1.1 保证可见性简介 可见性就是指当一个线程修改了共享变量的值时,其他线程能够立即得知这个修改。volatile变量做到了这一点。 Java内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值这种依赖主内存作
阅读全文
线程基础知识08 线程的等待和唤醒
摘要:1 简介 目前,JAVA提供了三种线程等待唤醒的机制。 1)synchronized + Object的wait()和notify()方法 2)Lock的lock()方法和unlock()方法+await()和signal()方法 3)LockSupport的park()和unpark()方法 2
阅读全文
线程基础知识07 线程中断机制
摘要:1 简介 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以,Thread.stop, Thread.suspend, Thread.resume方法 都已经被废弃了。 在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了
阅读全文
线程基础知识06 synchronized---使用javap查看相关指令
摘要:1 示例-简单同步代码块 public class SychTest9 { public static void main(String[] args) { Object o = new Object(); synchronized (o){ System.out.println("aaa"); }
阅读全文
线程基础知识05 synchronized类锁和对象锁演示
摘要:1 简介 synchronized在方法内,同步代码块,传入对象,使用的是对象锁,传入class对象,使用的是类锁 作用于普通方法,也是对象锁,当前对象 作用于静态方法,是类锁 2 同步方法示例 2.1两个synchronized 修饰的普通方法 public class SychTest1 { <
阅读全文
线程基础知识02-CompletableFuture
摘要:1 简介 Futrue可以监视目标线程调用call的情况,当你调用Future的get()方法以获得结果时,调用方的线程就被阻塞,直到目标线程的call方法结束并返回结果。 线程的实现方式有几种方式,继承Thread类,实现Runnable接口,线程池,callable这种方式。 callable和
阅读全文
线程基础知识01-几个概念
摘要:1 进程、线程、管程 1.1 进程 我们在电脑上打开微信就开启了一个进程,打开一个腾讯视频又是一个进程。 1.2 线程 一个进程中可以有一个和多个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存,从而极大地提高了程序的运行效率。多个线程执行进程中的不同的任务。 比如qq,我发送文件
阅读全文
线程基础知识 03 synchronized锁(对象在内存的布局和加上锁后对象在内存中的变化)
摘要:1 线程不安全演示 public class ThreadAndLockTest1 { private static int a = 0; public static void main(String[] args) throws InterruptedException { CountDownLa
阅读全文