JUC编程
Mr_树先森
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【JUC编程】并发线程同步
概念:并发:同一个对象被多个线程同时操作线程同步形成条件:队列+锁关键词:synchronized当一个线程对象获得对象的排它锁,独占资源,其他线程必须等待使用后释放锁。存在的问题:(1)一个线程持有锁,会导致其他所有需要此锁的线程挂起(2)在线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题(3)如果一个优先级高的线程等待一个优先级低的线程释放锁,会引起优先级倒置,引起性能问题核心:在程序执行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程原创 2021-07-08 16:08:45 · 115 阅读 · 0 评论 -
【JUC编程进阶】死锁排查
/** * @author admin * @version 1.0.0 * @ClassName demo1.java * @Description TODO * @createTime 2021年06月02日 19:57:00 */public class demo1 { public static void main(String[] args) { String lockA = "lockA"; String lockB = "lockB";原创 2021-06-02 20:12:50 · 84 阅读 · 0 评论 -
【JUC编程进阶】自旋锁
自定义一个锁:package spinLock;import day3.A;import java.util.concurrent.atomic.AtomicReference;/** * @author admin * @version 1.0.0 * @ClassName demo1.java * @Description TODO * @createTime 2021年06月02日 19:37:00 */// 自旋锁public class demo1 { //原创 2021-06-02 19:49:45 · 171 阅读 · 0 评论 -
【JUC编程进阶】可重入锁
公平锁:不能插队,先来后到ReentrantLock lock = new ReentrantLock(true);非公平锁:可以插队,3s可以插队3hReentrantLock lock = new ReentrantLock();可重入锁:又叫递归锁:拿到外面的锁,就可以拿到里面的锁,自动获得synchronized版:package lock;/** * @author admin * @version 1.0.0 * @ClassName demo1.java * @原创 2021-06-02 19:36:22 · 128 阅读 · 0 评论 -
【JUC编程进阶】ABA问题
package CAS;import java.util.concurrent.atomic.AtomicInteger;/** * @author admin * @version 1.0.0 * @ClassName demo1.java * @Description TODO * @createTime 2021年06月02日 18:35:00 */public class demo1 { public static void main(String[] args) {原创 2021-06-02 19:18:52 · 191 阅读 · 0 评论 -
【JUC编程进阶】CAS
什么是CAS?package CAS;import java.util.concurrent.atomic.AtomicInteger;/** * @author admin * @version 1.0.0 * @ClassName demo1.java * @Description TODO * @createTime 2021年06月02日 18:35:00 */public class demo1 { public static void main(String[]原创 2021-06-02 18:50:30 · 99 阅读 · 0 评论 -
【JUC编程进阶】单例模式
饿汉式:package single;/** * @author admin * @version 1.0.0 * @ClassName Huan.java * @Description TODO * @createTime 2021年06月02日 16:27:00 *//** * 饿汉式单例 */public class Hungry { // 可能会浪费空间 private byte[] date1 = new byte[1024*1024]; pri原创 2021-06-02 17:40:59 · 122 阅读 · 0 评论 -
【JUC编程进阶】Volatile
问题:程序不知道主内存的值已经被修改过了保证可见性,package tVolatile;import java.util.concurrent.TimeUnit;/** * @author admin * @version 1.0.0 * @ClassName demo1.java * @Description TODO * @createTime 2021年06月01日 20:34:00 */public class demo1 { // 不加volatile,程序会原创 2021-06-01 21:23:19 · 122 阅读 · 0 评论 -
【JUC编程进阶】JMM
Volatile:Java虚拟机提供的轻量级同步机制。保证可见性不保证原子性禁止指令重排JMM:Java内存模型,不存在的东西,概念,约定关于JMM的一些同步约定:线程解锁前必须把共享变量立刻刷新回主存。线程加锁前必须读取主存中的最新值到工作内存中。加锁和解锁是同一把锁八个操作:read 读取,作用于主内存把变量从主内存中读取到本本地内存。load 加载,主要作用本地内存,把从主内存中读取的变量加载到本地内存的变量副本中use 使用,主要作用本地内存,把工作内存中的一个变原创 2021-06-01 20:39:05 · 208 阅读 · 0 评论 -
【JUC编程进阶】异步回调
package yibu;import java.util.concurrent.CompletableFuture;import java.util.concurrent.TimeUnit;/** * @author admin * @version 1.0.0 * @ClassName demo1.java * @Description TODO * @createTime 2021年06月01日 19:50:00 */public class demo1 { /**原创 2021-06-01 20:09:50 · 133 阅读 · 0 评论 -
【JUC编程进阶】ForkJoin分支合并
并行执行任务,提高效率。把大任务拆分城小任务。分开执行,最后结果汇总。特点:工作窃取维护的是 双端队列,package forkjoin;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.ForkJoinTask;import java.util.stream.LongStream;/** * @author admin * @version 1.0.0 * @ClassName Test.ja原创 2021-06-01 19:46:57 · 141 阅读 · 0 评论 -
【JUC编程进阶】Stream流式计算
package Stremtesrt;import java.lang.reflect.Array;import java.util.Arrays;import java.util.List;/** * @author admin * @version 1.0.0 * @ClassName demo1.java * @Description TODO * @createTime 2021年05月31日 21:11:00 */public class demo1 { /**原创 2021-05-31 21:27:10 · 127 阅读 · 0 评论 -
【JUC编程进阶】四大函数式接口
函数式接口:只有一个方法的接口@FunctionalInterfacepublic interface Runnable { public abstract void run();}超级多的@FunctionalInterface可以简化编程模型,在新版本的框架底层大量应用,foreach(消费者类的函数式接口)函数式接口:function:函数型接口,有一个输入参数,有一个输出package function;import java.util.function.Funct原创 2021-05-31 21:06:12 · 221 阅读 · 0 评论 -
【JUC编程进阶】线程池
线程池的好处:降低资源的消耗提高响应的速度方便管理线程复用,可以控制最大并发数,管理线程三大方法,七大参数,四种拒绝策略:三大方法:Executors.newCachedThreadPool(); 可伸缩的,遇强则强 public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE,原创 2021-05-31 19:45:40 · 128 阅读 · 0 评论 -
【JUC编程进阶】同步队列SynchronousQueue
同步队列:没有容量,进去一个元素,必须等待取出来后,才能往里面放一个元素。区别:和其他BlockingQueue不一样,SynchronousQueue不存储元素put,take原创 2021-05-31 18:40:14 · 114 阅读 · 0 评论 -
【JUC编程进阶】阻塞队列BlockingQueue
FiFo:先进先出AbstractQueue 非阻塞队列,BlockingDeque双端队列写入:如果队列满了,就必须等待阻塞取:如果队列是空的,就必须阻塞等待生产BlockingQueue不是新的东西:什么情况下使用阻塞队列?多线程并发处理,线程池使用:四组API1.抛出异常package Bqueen;import java.util.Collection;import java.util.concurrent.ArrayBlockingQueue;/** * @原创 2021-05-28 21:25:36 · 113 阅读 · 0 评论 -
【JUC编程进阶】ReadWriteLock
读写锁:ReadWriteLock维护一对关联的locks,一个只用读操作(共享锁),一个用于写操作(独占锁),readlock可以有多个阅读器线程同时执行,write lock是独家的。package ReadWriteLockTest;import java.util.Collection;import java.util.HashMap;import java.util.Map;import java.util.Set;import java.util.concurrent.locks原创 2021-05-28 20:24:08 · 126 阅读 · 0 评论 -
【JUC编程进阶】常用辅助类
CountDownLatch原创 2021-05-16 21:29:20 · 106 阅读 · 0 评论 -
【JUC编程进阶】Callable
Callable接口:类似于Runnable,因为他们都是为其实例可能由另一个线程执行的类设计的,然而Runnable不返回结果,也不能抛出被检查的异常。方法不同,run/callpackage callable;import java.util.concurrent.Callable;import java.util.concurrent.FutureTask;/** * @author jitwxs * @date 2021年05月15日 20:56 */public cla原创 2021-05-15 21:16:02 · 124 阅读 · 0 评论 -
【JUC编程进阶】集合类不安全
BlockingQueue:阻塞队列ListList不安全:并发时出现java.util.ConcurrentModificationException 并发修改异常解决方案:1.List list = new Vector<>();2.List list = Collections.synchronizedList(new ArrayList<>());3.List list = new CopyOnWriteArrayList<>();impo.原创 2021-05-15 20:26:08 · 162 阅读 · 3 评论 -
【JUC编程进阶】八锁现象
锁的是谁? 对象,class1.标准情况下,是先打印发短信,还是打电话? 先发短信,后打电话 (谁先拿到锁,谁先执行)2.发短信延迟四秒的情况下,是先打印发短信,还是打电话? 先发短信,后打电话package day4;import java.util.concurrent.TimeUnit;/** * @author jitwxs * @date 2021年05月12日 20:10 *//* * 八锁就是关于锁的八个问题 * 1.标准情况下,是先打印发短信,还是打电原创 2021-05-12 21:02:51 · 107 阅读 · 0 评论 -
【JUC编程进阶】消费者生产者问题 防止虚假唤醒
synchronized版:package day3;/** * @author jitwxs * @date 2021年05月11日 20:31 *//* * 线程之间通信问题:生产者消费者问题 等待唤醒,通知唤醒 * 线程交替执行 A B 操作同一个变量 num = 0 * A num+1 * B num-1 */public class A { public static void main(String[] args) {原创 2021-05-12 20:05:09 · 134 阅读 · 0 评论 -
【JUC编程进阶】前置知识
前置知识:JUC:java.util工具包java默认线程:有两个默认线程,main,GCjava真的可以开启线程吗? 不可以,调用本地方法,底层的C++,Java无法直接操作硬件并发:多线程操作同一个资源CPU一核:快速交替,模拟出多线程CPU多核:多个线程可以同时执行获取CPU核数:Runtime.getRuntime().availableProcessors()package day1;/** * @author jitwxs * @date 2021年05月11日 17原创 2021-05-11 20:27:58 · 188 阅读 · 2 评论 -
【JUC编程】线程池
背景:经常创建和销毁线程,在使用量大的情况下,比如并发下对性能影响比较大。思路:提前创建好多个线程,放入线程池,使用时直接获取,使用完放回线程池。好处:提高响应速度,降低资源消耗,便于线程管理。corePoolSize:核心池的大小maximumPoolSize:最大线程数keepAliveTime:线程没有任务时最长保留多久时间后终止ExecutorService和 ExecutorsExecutorService:真正的线程池接口,常见子类ThreadPoolExecutorvoid .原创 2021-05-10 20:53:16 · 85 阅读 · 0 评论 -
【JUC编程】生产者消费者问题(线程协作)
wait():表示线程一直等待,直到其他线程通知,与sleep不同,会释放锁notify():唤醒一个处于等待状态的线程notifyAll():唤醒同一个对象上所有调用wait()方法的线程,优先级别高的线程先调度...原创 2021-05-10 20:33:41 · 101 阅读 · 0 评论 -
【JUC编程】Lock ReentrantLock
显示的定义锁,进行上锁和解锁。ReentrantLock初体验:package diaodu;import java.util.concurrent.locks.ReentrantLock;/** * @author jitwxs * @date 2021年05月09日 19:52 */public class Lock { //测试Lock public static void main(String[] args) { Lock1原创 2021-05-09 20:08:52 · 98 阅读 · 0 评论 -
【JUC编程】守护线程
概念:线程分为用户线程和守护线程虚拟机必须确保用户线程执行完毕虚拟机不必等待守护线程执行完毕比如:后台操作日志,垃圾回收等…示例:/** * @author jitwxs * @date 2021年04月13日 16:49 */public class Caraful { public static void main(String[] args) { God god=new God(); I my=原创 2021-04-13 17:23:04 · 145 阅读 · 0 评论 -
【JUC编程】线程调度详解
线程方法:setPriority(int n)更改线程优先级static void sleep(long n)在指定毫秒内让正在执行的线程休眠。void join()线程插队static void yield()暂停当前线程,执行其他线程boolean isAlive()测试线程是否处于活动状态线程停止:建议线程正常停止—>利用次数,不建议死循环建议使用标志位–>设置一个标志位不要使用stop或destory等过时方法示例:/** * @author jitwx原创 2021-04-11 22:20:38 · 247 阅读 · 0 评论 -
【JUC编程】线程的创建(三)
创建步骤:实现Callable接口,需要返回值类型重写call方法,需要抛出异常创建目标对象执行创建任务:ExecutorService ser=Executor.newFixedThreadPool(1);提交执行:Future result=ser.submit(t1);获取结果:boolean r=result.get()关闭服务:ser.shutdownNow();入门案例:从网络下载图片:package Callable;import org.apache.commo原创 2021-04-11 19:48:26 · 133 阅读 · 0 评论 -
【JUC编程】线程的创建(二)
创建步骤:优点:避免单继承的局限性,灵活多变,方便同一个对象被多个线程使用。自定义类实现Runnable接口实现Run方法,编写线程体创建线程对象,调用start方法启动线程实现:/** * @author jitwxs * @date 2021年04月11日 15:08 */public class ThreadRun implements Runnable{ @Override public void run() {原创 2021-04-11 19:26:24 · 108 阅读 · 0 评论 -
【JUC编程】线程的创建(一)
概述:线程创建方式:继承Thread类实现Runnable接口实现Callable接口实现:Thread:线程开启不一定立即执行,有CPU调度执行自定义类继承Thread类重写run方法,编写线程执行体创建线程对象,调用start方法启动线程/** * @author jitwxs * @date 2021年04月11日 14:27 *///继承Thread类public class ThreadOne extends Thread{ //重写run原创 2021-04-11 15:04:19 · 131 阅读 · 0 评论
分享