
多线程
文章平均质量分 82
伍华锋
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
布隆过滤器原理
文章目录测试参考文章,点击这里原博文,点击这里作用嘛就是用来过滤非法key,避免缓存穿透,布隆过滤器用的是位数组,很节省空间,性能也相当好先贴demo后BBpublic class MyBloomFilter { //你的布隆过滤器容量 private static final int DEFAULT_SIZE = 2 << 28; //bit数组,用来存放key private static BitSet bitSet = new BitSet(DEF转载 2021-08-26 11:28:18 · 163 阅读 · 0 评论 -
线程池的使用结合@Async实现异步调用
文章目录1.编写配置文件2.创建接口 AsyncService3.编写AsyncService实现4.编写controller5.启动服务调用接口查看 快速刷新(如果效果不明显,请增加线程睡眠时间),目的是复现高并发场景,有环境可以进行压力测试6.为了查看更多线程信息,实现VisiableThreadPoolTaskExecutor 继承ThreadPoolTaskExecutor原文链接,点击这里@Async的使用和异步Future的回调1.编写配置文件package com.hbedu.sea转载 2020-08-03 21:55:31 · 555 阅读 · 0 评论 -
CountDownLatch和CyclicBarrier和Semaphore三者之间的关系
文章目录1.CountDownLatch某个线程等待其他线程执行完毕之后在执行的工具 ,做减法 减到0 再执行枚举可以当作小型数据库来使用,很实用CyclicBarrierCyclicBarrier和CountDownLatch的区别:Semaphore1.CountDownLatch某个线程等待其他线程执行完毕之后在执行的工具 ,做减法 减到0 再执行public static void ...转载 2020-02-05 12:28:26 · 237 阅读 · 0 评论 -
ReentrantLock的lock(), tryLock(), lockInterruptibly() 及使用场景示例
文章目录总述1.ReentrantLock简要介绍2.ReentrantLock提供的获取锁的方式2.1 lock()2.2 tryLock()2.3 tryLock(long timeout, TimeUnit unit)2.4 lockInterruptibly()3.使用场景示例3.1 对于tryLock()的测试3.2 tryLock(long,TimeUnit),3.3 tryLock(...原创 2020-01-12 21:33:11 · 2445 阅读 · 0 评论 -
BlockingQueue(阻塞队列)相关内容分析
文章目录1. 前言2.看一下阻塞与非阻塞入队:出队:2.2 LinkedBlockingQueue 源码分析原理3.源码分析3.1 具体入队与出队的原理图:3.2、入队两个元素过后3.3、出队一个元素后put方法总结:E take()方法take方法总结:remove()方法提问:为什么remove()方法同时需要两把锁?LinkedBlockingQueue总结:4. ArrayBlocking...转载 2020-01-12 11:21:12 · 886 阅读 · 0 评论 -
多线程交替打印ABC的多种实现方法
文章目录一、题目描述二、Synchronized同步法1、基本思路2、代码二、Lock锁方法1、基本思路2、代码三、ReentrantLock结合Condition1、基本思路2、代码四、Semaphore信号量方式1、基本思路2、代码一、题目描述建立三个线程A、B、C,A线程打印10次字母A,B线程打印10次字母B,C线程打印10次字母C,但是要求三个线程同时运行,并且实现交替打印,即按照A...转载 2020-01-10 14:53:53 · 2384 阅读 · 0 评论 -
AQS 原理以及 AQS 同步组件总结
2 AQS 原理在面试中被问到并发知识的时候,大多都会被问到“请你说一下自己对于AQS原理的理解”。下面给大家一个示例供大家参加,面试不是背题,大家一定要假如自己的思想,即使加入不了自己的思想也要保证自己能够通俗的讲出来而不是背出来。下面大部分内容其实在AQS类注释上已经给出了,不过是英语看着比较吃力一点,感兴趣的话可以看看源码。2.1 AQS 原理概览AQS核心思想是,如果被请求的共享资...转载 2020-01-02 15:57:36 · 219 阅读 · 0 评论 -
一丶自定义线程池
队列为有界队列的情况:public class MyTask implements Runnable { private int taskId; private String taskName; public MyTask(int taskId, String taskName){ this.taskId = taskId; this.taskName = taskName;...转载 2019-09-16 15:50:50 · 175 阅读 · 0 评论 -
二丶线程之间的通信以及notify和notifyAll的区别
一、while(true)轮询public class ListAdd1 { private volatile static List list = new ArrayList(); public void add(){ list.add("jack"); } public int size(){ return list.size(); } public sta...转载 2019-09-16 15:53:01 · 129 阅读 · 0 评论 -
三丶线程的生命周期
在线程的生命周期中,它要经过 新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)或者结束(Terminated) 5种状态。尤其是当线程启动以后,它不可能一直"霸占"着CPU独自运行,所以CPU需要在多条线程之间切换,于是 线程状态也会多次在运行、阻塞之间切换。NewThread thread = new Thread(() ->...转载 2019-09-16 15:54:24 · 145 阅读 · 0 评论 -
四丶Future模式
public interface Data { String getRequest();}public class FutureData implements Data{ private RealData realData ; //标识是否已经获取到结果 private boolean isReady = false; public synchronized void setRea...转载 2019-09-16 15:56:31 · 108 阅读 · 0 评论 -
Java线程池参数详解及工作原理
一、线程池简介1.底层都是ThreadPoolExecutor实现2.3.核心线程数corePoolSize:线程池的常驻核心线程数4.maximumPoolSize线程池能够容纳同时执行的最大线程数5.keepAliveTime:多余的空闲线程的存活时间。当空闲时间达到keepAliveTime时,多余的线程将被销毁,直至只剩下corePoolSize的数量为止。6.unit:ke...转载 2019-12-23 20:25:08 · 999 阅读 · 0 评论 -
ThreadLocal,TransmittableThreadLocal
参考文献:手撕面试题ThreadLocal!!!ThreadLocal-面试必问深度解析通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK中提供的ThreadLocal类正是为了解决这样的问题。 ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子...转载 2019-12-23 21:01:57 · 638 阅读 · 1 评论 -
Java中保证线程安全
文章目录一、线程安全在三个方面体现二、原子性---atomic(1)AtomicInteger(2)AtomicStampedReference(3)AtomicLongArray(4)AtomicBoolean三、原子性---synchronized四、可见性---volatile(1)volatile的可见性是通过内存屏障和禁止重排序实现的(2)但是volatile不是原子性的,进行++操作不...转载 2020-01-01 20:28:27 · 859 阅读 · 0 评论 -
线程中断机制(interrupt)
参考博文:Thread中interrupted()方法和isInterrupted()方法区别总结首先讲 interrupt() 方法:interrupt()方法只是改变中断状态,不会中断一个正在运行的线程。需要用户自己去监视线程的状态为并做处理。interrupt 中断操作时,非自身打断需要先检测是否有中断权限,这由jvm的安全机制配置;如果线程处于sleep, wait, jo...原创 2019-12-19 20:44:48 · 771 阅读 · 0 评论 -
synchronized和volatile之间的区别于联系
volatile是轻量级的synchronized。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。容易忘记的点:在退出和抛出异常的时候都会释放锁。代码块同步是使用monitorenter和monitorexit指令实现的内存语义: 进入 synchronized 块的内存语义:是把在 synchroni...原创 2019-11-28 22:01:17 · 144 阅读 · 0 评论 -
并发编程(JMM+AQS+Synchronized+hashMap)
1.Lock和Synchronized关键字的区别:2.线程与线程之间是不能直接同步变量。下面是volatile底层操作。原创 2019-11-05 22:22:32 · 390 阅读 · 0 评论 -
Thread.sleep(0)的意义
我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 的时候,这个线程会 不会被唤醒?某人的代码中用了一句看似莫明其妙的话:Thread.Sleep(...转载 2019-07-08 20:13:22 · 101 阅读 · 0 评论 -
java中线程睡眠sleep()方法介绍
1、方法介绍 sleep(long millis) 线程睡眠 ...转载 2019-07-08 20:20:10 · 2282 阅读 · 0 评论 -
多线程中的Fututer模式,Master-Worker模式:
public class FutureClient { public Data request(final String queryStr){ //1 我想要一个代理对象(Data接口的实现类)先返回给发送请求的客户端,告诉他请求已经接收到,可以做其他的事情 final FutureData futureData = new FutureData(); //2 启动一个新的线程,...原创 2019-09-09 15:54:38 · 215 阅读 · 0 评论 -
多线程相关的类
Runnable接口,Thread类,和Callable相关的类CountDownLatch(2):需要两个线程都countDown,才能唤醒那个线程。public class UseCountDownLatch { public static void main(String[] args) { final CountDownLatch countDown = new Cou...原创 2019-09-10 15:21:59 · 299 阅读 · 0 评论 -
Java ExecutorService四种线程池的例子与说明
1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub }}).start();复制代码那你就out太多了,new Thread的弊端如...转载 2019-07-08 20:08:45 · 412 阅读 · 0 评论