多线程
清墨迹染
悟来时见江海古,苍崖行遍谒玄门;向道偶题人间事,一笛一剑一昆仑
展开
-
延迟队列的使用和理解——附代码
package com.example.demo.ThreadPool;import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;/*** * 定义消息体,必须实现Delayed且重写方法 */public class DelayQueneMessage implements Delayed {...原创 2020-02-21 17:31:28 · 186 阅读 · 0 评论 -
多线程——线程安全相关问题
类的线程安全定义如果多线程下使用这个类,不管多线程如何使用和调度这个类,这个类总是表示出正确的行为,这个类就是线程安全的。类的线程安全表现为:操作的原子性内存的可见性不做正确的同步,在多个线程之间共享状态的时候,就会出现线程不安全。怎么才能做到类的线程安全?栈封闭所有的变量都是在方法内部声明的,这些变量都处于栈封闭状态。无状态没有任何成员变量的类,就叫无状态的类让类不可变让...原创 2020-01-13 16:24:08 · 301 阅读 · 0 评论 -
线程池的理解和使用(附代码说明)
为什么要用线程池?1、降低资源的消耗。降低线程创建和销毁的资源消耗;2、提高响应速度:线程的创建时间为T1,执行时间T2,销毁时间T3,免去T1和T3的时间3、提高线程的可管理性。线程池模型我们不妨动手写一个线程池,主要有以下几个核心概念,阻塞队列中待执行的任务,线程正在执行的任务,线程数。package com.xiangxue.ch6.mypool;import java.u...原创 2019-12-20 11:34:56 · 322 阅读 · 0 评论 -
并发容器——位运算、currentHashMap源码解析、写时复制容器
ConcurrentHashMappublic class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements ConcurrentMap<K,V>, Serializable {可以理解为线程安全的HashMap,新增几个方法putIfAbsent:如果已经存在值则返回,否则插入...原创 2019-12-04 15:11:22 · 372 阅读 · 0 评论 -
AQS数据结构——同步队列
aqs即AbstractQueuedSynchronizer类的简称,里面包含了一系列对锁的操作竞争失败的线程会打包成Node(源码里是aqs类的一个内部类)放到同步队列,竞争失败的线程会打包成Node放到同步队列,Node可能的状态里:CANCELLED:线程等待超时或者被中断了,需要从队列中移走SIGNAL:后续的节点等待状态,当前节点,通知后面的节点去运行CONDITION :当前...原创 2019-11-08 16:10:47 · 575 阅读 · 0 评论 -
Lock显示锁和Aqs——Condition接口和可重入锁,读写锁
Lock接口和synchronized的比较使用private Lock lock = new ReentrantLock();private int count =0; public void docount() {//lock方法 lock.lock(); try { count++; } finally { lock...原创 2019-10-15 16:17:51 · 184 阅读 · 0 评论 -
CAS原子操作思想
Compare And Set 比较并设置synchronized存在的问题:在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题一个线程持有锁会导致其他需要此锁的线程挂起如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险乐观锁其实已经没有锁的概念,而是假设没有冲突的去完成某项操作,如果因为冲突失败就重试,直到成功为止。CAS思想...原创 2019-09-16 20:22:13 · 178 阅读 · 0 评论 -
java多线程之线程共享(二)——synchronized、volatile、ThreadLocal
最近有在跟着某讯课堂学习架构师模块,先系统化的回顾一下多线程相关的知识,之后会持续更新。synchronized内置锁定义:线程进入同步代码块或方法的时候会自动获得锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。对象锁,锁的是类的对象实例。对象锁有两种方式private synchronized void test1(){ ...原创 2019-08-21 14:42:05 · 321 阅读 · 0 评论 -
线程间的协作——notify、notifyAll,wait,Join
notify和notifyAll 的作用是唤醒正在wait的线程,三者都是Object的方法,notify是随机唤醒wait线程中的一个,notifyAll 则是唤醒全部。1).执行notify、notifyAll 方法的前提是当前线程已经获取到对象的锁,也就是必须在synchronized修饰的代码块或者方法中使用。这个和wait是一样的。2).被调用notify()或者notifyAll(...原创 2019-08-26 11:25:34 · 203 阅读 · 0 评论 -
java多线程之基础(一)
线程和进程:进程:资源(cpu,内存,磁盘)分配的最小单位线程:归属于某个进程,cpu调度的最小单元(栈、程序计数器),堆cpu轮转机制(RR调度):主要用于分时系统中的进程调度。为了实现轮转调度,系统把所有就绪进程按先入先出的原则排成一个队列。新来的进程加到就绪队列末尾。每当执行进程调度时,进程调度程序总是选出就绪队列的队首进程,让它在CPU上运行一个时间片的时间。时间片是一个小的时间单位...原创 2019-08-16 20:45:54 · 156 阅读 · 0 评论 -
多线程常用工具类—— CountDownLatch、CyclicBarrier、Semaphore
CountDownLatch作用:是一组线程等待其他(一组)的线程完成工作以后再执行,可看做加强版join常用方法 CountDownLatch(int count) //实例化一个倒计数器,count指定计数个数 countDown() // 计数减一 await() //等待,当计数减到0时,所有线程并行执行举个栗子,下面代码,要保证上面的11个线程都执行完主线程才往下执行,就需...原创 2019-08-28 11:44:32 · 282 阅读 · 0 评论 -
ForkJoin框架从入门到使用
因为本章很多是笔者参考自中文版API,先附上链接https://ifeve.com/tag/forkjoin/ForkJoin:体现了分而治之的思想,大于既定大小,分为很多子任务,小于既定大小,直接调用任务解决(自己判断情形),子任务是相对独立的,与原问题形式相同,将子问题的解合并得到原问题的解(有点类似mapReduce)fork操作:当你把任务分成更小的任务和使用这个框架执行它们。...原创 2019-08-26 17:51:42 · 152 阅读 · 0 评论