java
文章平均质量分 54
迷途老码
这个作者很懒,什么都没留下…
展开
-
分支合并框架
概念Fork/Join框架是把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果。示例实现一个算法,根据输入整数开始值和结束值,求和。求和过程,如果超过10个数就拆分成子任务计算,最后相加。package com.mine.juc.forkjoin;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.ForkJoinTask;import java.util.concurrent.Recurs原创 2022-05-22 00:32:32 · 233 阅读 · 0 评论 -
java线程池
几种常见的线程池Executors.newFixedThreadPool:固定线程大小的线程池,队列为LinkedBlockingQueue。Executors.newSingleThreadExecutor:单个线程的线程池,队列为LinkedBlockingQueue。Executors.newCachedThreadPool:无限大小的线程池,队列为SynchronousQueue,只能有一个元素。Executors.newScheduledThreadPool:无限大小的线程池,队列为De原创 2022-05-22 00:31:14 · 140 阅读 · 0 评论 -
BlockingQueue
概念BlockingQueue 通常用于一个线程生产对象,而另外一个线程消费这些对象的场景。一个生产线程往阻塞队列中放入元数,如果阻塞队列放满了,放入元数操作,生产会进入阻塞状态,直到有消费线程拿走一个元数,生产线程才能放入元数;同理,一个消费线程从阻塞队列获取元数,如果阻塞队列没有元素了,消费线程也会进入阻塞状态,直到有生产线程放入元素,消费线程才能获取到元素。BlockingDequeBlockingDeque 类是一个双端队列,在不能够插入元素时,它将阻塞住试图插入元素的线程;在不能够抽取元原创 2022-05-22 00:27:45 · 162 阅读 · 0 评论 -
CAS介绍
i++多线程问题package com.mine.juc.cas;public class IncrementDemo { private static int temp = 1; public static void main(String[] args) { System.out.println("=====i++多线程问题====="); new Thread(new Runnable() { public void run() { for (int i = 0;原创 2022-05-22 00:16:44 · 155 阅读 · 0 评论 -
多线程辅助类
CountDownLatch允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。用给定的计数初始化。 await方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await 调用立即返回。 这是一个一次性的现象 - 计数无法重置。 如果您需要重置计数的版本,请考虑使用CyclicBarrier 。班长锁门问题package com.mine.juc.tools;import java.util.concurrent.Co原创 2022-05-22 00:12:51 · 149 阅读 · 0 评论 -
集合的线程安全问题
ArrayList的线程安全问题代码package com.mine.juc.collection;import java.util.ArrayList;import java.util.List;import java.util.UUID;public class ArrayListDemo { public static void main(String[] args) { final List<String> list = new ArrayList<Stri原创 2022-05-22 00:08:18 · 127 阅读 · 0 评论 -
多线程通信
多线程通信方式Object的wait和notify、notifyallReentrantLock中Condition的await和signal、signalAll三个线程轮流打印AA、BB和CC实现方式1package com.mine.juc.multithreadcommunication;class Resource { private int flag = 1; public synchronized void printAA(int num) throws Interrup原创 2022-05-22 00:03:08 · 82 阅读 · 0 评论 -
java中的相关锁
1、两种常见锁synchronized和ReentrantLock的区别synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的⽅法或者代码块在任意时刻只能有⼀个线程执⾏。ReentrantLock是Java并发包中提供的一个可重入的互斥锁。可重入性:所谓的可重入性,就是可以支持一个线程对锁的重复获取,原生的synchronized就具有可重入性,一个用synchronized修饰的递归方法,当线程在执行期间,它是可以反复获取到锁的,而不会原创 2022-05-22 00:01:18 · 223 阅读 · 0 评论 -
多线程概念
线程的生命周期状态NEW:初始状态,线程被创建,但是还没有调用start方法。RUNNABLE:运行状态,Java线程中把操作系统中的就绪(READY)和运行(RUNNING)两种状态笼统的称作运行中。BLOCKED:阻塞状态,表示线程阻塞于锁。WAITING:等待状态,表示线程进入等待状态,进入该状态表示当前线程需要等待其他线程做出一些特定动作。TIME_WAITING:超时等待状态,该状态不同于WAITING,他是可以在指定时间自行返回的。TERMINATED:终止状态,表示当前线程已经原创 2022-05-21 23:51:30 · 148 阅读 · 0 评论 -
序列化框架性能对比
100万简单实体序列化结果如下=testJdkSerialize=耗时1349ms=testJdkSerialize==testFSTSerialize=耗时331ms=testFSTSerialize==testFastJsonSerialize=耗时300ms=testFastJsonSerialize==testGsonSerialize=耗时675ms=testG...原创 2018-10-25 23:41:47 · 564 阅读 · 0 评论