
多线程JUC编程
多线程、JUC
dandanforgetlove
这个作者很懒,什么都没留下…
展开
-
mq消费,多条累积定时定量批量消费
mq消费handle中的方法部分代码 // 队列处理 if (ElasticSearchEnums.ES_UPDATE.getMqType().equalsIgnoreCase(mqType)) { return loanEsQueueService.updateLoanToEs(object); } else if (ElasticSearchEnums.ES_INSERT.getMqType().equalsIgnoreCase(mqType)) { ..原创 2022-03-02 11:50:51 · 2155 阅读 · 4 评论 -
多线程与高并发编程总结、提升QPS
线程启动的三种方式 1. new Thread().start() 2.new Runnable().start(); 3.使用线程池。Executors.newCachedThreadPool() 线程的六种状态 1.new 新建一个线程,未启动。 2.runnable 已经start的线程,等待资源,比如cpu资源。 3.blocked 阻塞状态。等待进入同步代码块锁 4.waiting 。调用了wait(),join(),LockSupport.park() 。 等待重新被唤醒。 5原创 2020-05-10 20:51:32 · 352 阅读 · 0 评论 -
多线程与高并发编程八、线程池
newSingleThreadExecutor ExecutorService service = Executors.newSingleThreadExecutor(); 单个线程池。一次运行一个线程。但是可以保证执行的顺序。 为什么要有单线程的线程池? 1. 有现成的任务队列 2.线程周期可以由线程池管理。 使用ThreadPoolExecutor 实现。核心线程、最大线程都为1. 任务阻塞队列为Integer.MAX_AVLUE public static ExecutorServi..原创 2020-05-09 18:07:32 · 165 阅读 · 0 评论 -
多线程与高并发编程七、线程池
Callable : 类似Runnable,但是有返回值 Future:存储执行的将来才会产生的结果。 FutureTask:Future + Runnable CompletableFuture 异步执行多个任务,并且等待所有任务完成 static String getStringA(){ System.out.println("A is go"); return "A"; } static String getStringB(){ .原创 2020-05-08 18:56:07 · 180 阅读 · 0 评论 -
打印1234567,ABCDEFG,两个线程交替打印
Object lock = new Object(); char[] a1 = "1234567".toCharArray(); char[] a2 = "ABCDEFG".toCharArray(); Thread t1 = new Thread(()->{ for(int i = 0; i < a1...原创 2020-05-08 16:54:00 · 512 阅读 · 0 评论 -
多线程与高并发编程六、容器 Map、Collection
容器 Vector<T>、Hashtable<K,V> ,自带加锁(synchronized),线程安全。 static Map<UUID,UUID> mm = Collections.synchronizedMap(new HashMap<>()); Collections.synchronizedMap 源码 final Obj...原创 2020-05-08 16:01:44 · 170 阅读 · 0 评论 -
多线程与高并发编程 五 java中的四种引用以及 Lock
java 中的引用 强、软、弱、需 强引用: int i = 10; 软引用: SoftReference<byte[]> m = new SoftReference<>(new byte[1024]); 用途:做缓存用。当内存空间足够时不会被回收,当不够时,软引用会被回收 弱引用: WeakReference<Person> p...原创 2020-05-08 10:54:02 · 145 阅读 · 0 评论 -
多线程与高并发四之 AQS源码解析(CAS+volatile)
volatile : 可见性:缓存一致性协议 MSI 禁止指令重排:JMM,内存屏障 synchronized 和 ReentrantLock 的区别 synchronized 系统自动上锁, ReentrantLock 需要手工上锁,ReentrantLock 可以出现各种condition (状况)。 例如tryLock 尝试加锁,lockInt...原创 2020-05-07 18:45:07 · 617 阅读 · 0 评论 -
多线程与高并发三 各种JUC 同步锁(JAVA中线程类)
ReentrantLock 可重入锁 ReentrantLock 可以自己控制tryLock 锁不上的情况 lockInterruptibly 上锁的时候被打断怎么办 ReentrantLock 公平锁和非公平锁,synchronized 只有非公平锁 CountDownLatch static void countDownLatchTest(){ Th...原创 2020-05-07 10:23:05 · 171 阅读 · 2 评论 -
多线程与高并发编程二 synchronized,synchronized 和 Lock对比
首先看下 饿汉式 单例模式 /** * 饿汉式 单例模式 */ public class MyThread { //初始化就 new 一个 static final MyThread myThread = new MyThread(); //定义为私有,不允许再new private MyThread(){} //直接把生成好的给他 p...原创 2020-05-06 16:46:43 · 256 阅读 · 0 评论 -
多线程与高并发编程一、Java的四种锁
1.程序、进程、线程 程序:桌面上的QQ、爱奇艺、优酷等等客户端都是一个程序 进程:当你双击这个程序,程序开始运行,即为一个进程。 线程:当你打开一个聊天窗口即为一个线程,播放一个电影为一个线程,进行视频下载即为一个线程。每一个独立的任务都为一个独立的线程。 2.调用线程 run的两种方法 public class ThreadTest { static class OneTh...原创 2020-05-06 11:31:08 · 182 阅读 · 0 评论 -
三步手写JDK锁
首先来看一段正常的多线程代码 public class JdkLock { int i = 0;//计数 // AtomicInteger atomicInteger = new AtomicInteger(0);//原子性 public void count(){ i++; // atomicInteger.getAndIncremen...原创 2020-05-01 19:40:58 · 192 阅读 · 0 评论