![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
Chenchen-
展望天空
展开
-
ThreadPoolExecutor 简单应用
适用场景:读取数据库数据,刷数据等批量操作 直接上代码 package test; import com.alibaba.fastjson.JSONObject; import io.tava.function.Consumer1; import org.springframework.stereotype.Component; @Component public class Producers implements Consumer1<JSONObject>{ private原创 2022-03-01 21:22:48 · 460 阅读 · 0 评论 -
多线程wait
wait 解除当前线程 对资源占用的锁 和释放cpu资源 写了两个例子理解wait sleep与wait的区别 sleep在任何地方,睡眠当前线程一定时间,让出cpu资源 wait 是等待,让出锁资源和cpu资源,让出锁资源就必须有锁,所以只能在synchronized块中,已经拿到锁了才可以调用wait来释放锁,notify是另一个线程调用,让wait队列中的一个出来,有再次争抢锁的权利,放到可以争抢锁的队列,notifyAll就是让所有wait的线程有争抢锁的权利。 Queue<Int原创 2021-08-08 23:40:38 · 752 阅读 · 1 评论 -
强引用,软引用,弱引用,虚引用
强引用StrongReference 例子:// 强引用 String strongReference = new String("abc"); 最普遍的引用,内存不够用报错GC也不会回收 软引用SoftReference 例子: // 软引用 String str = new String("abc"); SoftReference<String> softReference = new SoftReference<String>(str); 内存不够用就会被回收 .原创 2020-10-22 17:42:50 · 84 阅读 · 0 评论 -
ThreadLocal 与 弱引用 与 内存泄漏
ThreadLocal threadlocal而是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据,使用方法也很简单 static final ThreadLocal<T> sThreadLocal = new ThreadLocal<T>(); sThreadLocal.set() sThreadLocal.get() 例子代码 public class ThreadLocalTest { ...原创 2020-10-22 16:24:53 · 225 阅读 · 0 评论 -
Lock和多线程工具笔记
ReentrantLock 介绍:用lock和unlock进行枷锁和解锁,配合try、finally来实现, 和synchronized wait notify 对比 1 有公平锁的功能 2 可中断lock.lockInterruptibly() 3CAS枷锁方式 4 trylock 可以规定时间内获得一把锁 CyclicBarrier(人满发车) 介绍:满人发车,可以限制N个线程阻塞,当阻塞线程达到N个之后,可以执行一个方法,阻塞的线程统一执行, 使用 CyclicBa...原创 2020-10-22 12:34:00 · 86 阅读 · 0 评论 -
淘宝多线程面试题2个分享
问题1 实现一个容器,提供两个方法,add,size,写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当到5个时候,线程2给出提示并结束。 考点:锁的应用wait和notify 以及其他锁的应用 import java.util.ArrayList; import java.util.List; public class TaobaoTest { public static void main(String[] args) { Container co原创 2020-10-22 11:05:54 · 234 阅读 · 1 评论 -
Volatile和锁Synchronized,cas(Atomic),ReentrantLock,ReadWriteLock 笔记
Synchronized 锁 特性: 原子性 ,可见性,可重入锁,异常会释放锁 使用: 1 加在方法上,如果是非静态方法就是锁住了这个对象,这个对象多个Synchronized方法只能执行一个 2加在方法上,如果是静态方法就是锁住了这个类,这个类多个Synchronized方法只能执行一个 3 加在对象上,Synchronized 对象同样的代码段只能执行一个 4 加在class上,Synchronized 同样的类代码段只能执行一个 锁升级: 偏向锁-》自旋锁-》重量锁 偏向锁:一个.原创 2020-10-21 14:39:38 · 121 阅读 · 0 评论 -
多线程6种状态转换
一 多线程状态转换图 二 状态转换 1 new 状态 还没调用start方法时候的状态 2 runnable 运行时状态 Java线程的RUNNABLE状态其实是包括了传统操作系统线程的ready和running两个状态的。 suspend()挂起,进入ready状态,resume()结束挂起进入running状态 Thread.yield 从新放到调度器的队列中等待轮到了就执行 3 time_waiting Sleep(time)睡眠指定时间 Wait (time)休眠指...原创 2020-10-21 11:45:24 · 594 阅读 · 0 评论