线程
文章平均质量分 70
小甄笔记
这个作者很懒,什么都没留下…
展开
-
synchronized锁升级的过程
在Java中,锁的状态分为四种,分别是无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态。原创 2024-03-19 15:54:52 · 148 阅读 · 0 评论 -
线程池——Executor、Executors、ExecutorService、ThreadPoolExecutor、ThreadPoolTaskExecutor之间的区别
java.util.concurrent.Executor 负责线程的使用和调度的根接口|–ExecutorService 子接口: 线程池的主要接口|–ThreadPoolExecutor 线程池的实现类|–ScheduledExceutorService 子接口: 负责线程的调度|–ScheduledThreadPoolExecutor : 继承ThreadPoolExecutor,实现了ScheduledExecutorService。原创 2024-01-31 15:27:10 · 878 阅读 · 0 评论 -
ThreadLocal原理及使用场景
最后简单总结一下,由于ThreadLocalMap包含了ThreadLocal,且线程Thread中包含变量ThreadLocalMap,因此ThreadLocalMap与Thread的生命周期是相同的,如果线程退出了,ThreadLocal自然就会被垃圾回收掉,所以不会出现内存泄漏。但在线程池中使用ThreadLocal的时候,我们还是要养成好习惯,ThreadLocal不在使用的时候调用remove方法,避免内存泄漏情况发生。原创 2023-11-14 12:14:42 · 81 阅读 · 0 评论 -
completablefuture使用案例代码
工具类代码原创 2022-08-09 11:48:55 · 453 阅读 · 0 评论 -
CompletableFuture用法详解
小笔记原创 2022-08-09 11:14:12 · 2655 阅读 · 0 评论 -
CAS原子操作
cas原创 2022-07-12 17:54:38 · 604 阅读 · 0 评论 -
CompletableFuture使用不当的生产问题记录
1原创 2022-06-30 17:38:54 · 3795 阅读 · 0 评论 -
线程池满Thread pool exhausted排查和解决
发生{ThreadpoolisEXHAUSTED}时的服务器日志:产生原因:大并发导致配置的线程不够用在初始时候,dubbo协议配置,我是使用dubbo默认的参数,dubbo线程池默认是固定长度线程池,大小为200。一开始出现线程池满的问题,本以为是并发量大导致的,没做太多关注,运维也没有把相应的日志dump下来,直接重启了。所以一开始只是优化了dubbo的配置。调大固定线程池数量为400,并且将dispatcher转发由默认的配置"all"改为message。all表示所有消息都派发...原创 2021-01-06 12:18:01 · 8243 阅读 · 0 评论 -
多线程使用场景
在业务逻辑里面往往会出现这样的步骤,比如更新信息到缓存、发送短信通知、发送邮件通知、推送信息到监控系统、到日志系统等。这些业务逻辑中的步骤,有相同的特点:不需要返回结果,业务逻辑不关心、同步调用会占用一部分的业务逻辑响应时间。占用响应时间这里,对于发邮件有时候尤为明显,邮箱一般有连接、验证账号是否存在、是否发送过于频繁、验证发送内容合法性。对于这样的调用我们当然想不占用或者尽量少的占用业务处理的时间。比如快速的抛给消息系统、比如采用多线程异步化处理。...原创 2020-11-13 16:58:18 · 758 阅读 · 1 评论 -
ThreadPoolTaskExecutor
配置文件spring-thread.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans原创 2020-10-28 18:03:57 · 23093 阅读 · 1 评论 -
redis之redission锁机制
底层操作redis的有lettuce、jedis、redission(也可用于分布式)redis之redission的分布式锁,既可用于单体应用,也可用于分布式项目对于分布式锁的操作和在单体应用中使用JUC的锁的操作是一样的redission的可重入锁(Reentrant Lock)有看门狗机制,可解决lock.lock()死锁的问题看门狗机制 问题:lock.lock(10, TimeUnit.SECONDS),在锁时间到期后,不会自动续期,也就是看门狗机制失效不起作用 1原创 2020-10-23 18:07:18 · 3802 阅读 · 0 评论 -
ReadWriteLock接口
ReadWriteLock 接口只有两个方法//返回用于读取操作的锁 Lock readLock() //返回用于写入操作的锁 Lock writeLock() ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持,而写入锁是独占的三个线程同时对一个共享数据进行读写import java.util.Random;import java.util.concurrent.lo原创 2020-10-23 16:59:55 · 91 阅读 · 0 评论 -
Lock的实现类 ReentrantLock
Lock的实现类 ReentrantLockReentrantLock,即可重入锁。ReentrantLock是唯一实现了Lock接口的类,并且ReentrantLock提供了更多的方法。下面通过一些实例学习如何使用 ReentrantLock构造方法(不带参数 和带参数 true: 公平锁; false: 非公平锁):/** * Creates an instance of {@code ReentrantLock}. * This is equivalent to ..原创 2020-10-23 16:53:01 · 314 阅读 · 0 评论 -
Lock接口详解
java.util.concurrent.locks包下常用的类与接口(lock是jdk 1.5后新增的)Lock和ReadWriteLock是两大锁的根接口,Lock代表实现类是ReentrantLock(可重入锁),ReadWriteLock(读写锁)的代表实现类是ReentrantReadWriteLockCondition 接口描述了可能会与锁有关联的条件变量。这些变量在用法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个 Lock 可原创 2020-10-23 16:36:13 · 1534 阅读 · 0 评论 -
一个线程在写,100个线程在读
线程启动类public class ThreadDemo06 { public static void main(String [] args){ final MyQueue q = new MyQueue(); FutureTask ft = new FutureTask(new Callable(){ @Override public Object call() throws Exception {原创 2020-10-22 22:44:33 · 238 阅读 · 0 评论 -
三线程接力:有ABC三个线程,要求A打印5次,接着B打印10次,接着C打印15次,来10轮
线程类(只负责调用资源类,并启动线程,不负责锁)import java.util.concurrent.Callable;import java.util.concurrent.FutureTask;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;//A、B、C三个线程接力pu原创 2020-10-22 22:34:45 · 191 阅读 · 0 评论 -
线程面试点
线程的获取4中方式继承Thread,实现Runnable 和 Callable接口,用工具类Executors工具类从线程池对象中获取线程Lock锁比synchronized的优势lock 锁实现了线程的有序调度,可以实现多个线程接力,如下订单,减库存,发消息而synchronized由cpu随机调度,如果你要实现:多个线程下单,减库存,发短信的有序进行,就需要用lock来完成Lock 替代了 synchronized 方法和语句的使用 Condition类中 await(),s.原创 2020-10-22 22:28:36 · 92 阅读 · 0 评论 -
生产者消费者模式+等待+通知唤醒
线程调用资源类public class ThreadDemo03 { public static void main(String [] args){ final ShareData sd = new ShareData(); FutureTask ft = new FutureTask(new Callable(){ @Override public Object call() throws Exception原创 2020-10-22 21:50:25 · 163 阅读 · 0 评论 -
Executors线程工具类
Executors类,提供了一系列工厂方法用于创建线程池,返回的线程池都实现了ExecutorService接口java.util.concurrent.Executors newCachedThreadPool() ...原创 2020-10-22 17:49:00 · 116 阅读 · 0 评论 -
线程池
java中提供线程池工具类:java.util.concurrent.Executors提供众多的线程池实现方法但是,归更到底都是在 new ThreadPoolExecutor对象,ThreadPoolExecutor是线程池的真正实现java.util.concurrent.Executor 类有子类接口 ExecutorService,抽象类 AbstractExecutorS...原创 2020-03-23 16:26:14 · 175 阅读 · 0 评论 -
线程(一)
程序,进程,线程概念程序:一段静态的代码进程:一段正在运行的程序线程:一个进程可以划分为多个执行单位,每一个执行单位,称为线程进程,线程是跟操作系统有关系的,跟java语言没有直接关系什么时候用多线程,多线程能解决什么问题(单路IO复用)有效的占用了cpu的资源,从某种意义来讲提高了效率线程api方法setName,getName:自定义线程的名称...原创 2020-03-23 17:47:22 · 96 阅读 · 0 评论 -
线程JUC包(二)
获取线程的4种方式1、继承Thread类2、实现Runnable 接口3、实现Callable接口4、用工具类Executors工具类或者new ThreadPoolExecute从线程池对象中获取线程Lock锁与synchronized锁Lock锁实现了线程的有序调度,而synchronized由CPU随机调度Lock代替了synchronized方法和语句的...原创 2020-03-24 11:34:45 · 127 阅读 · 0 评论 -
Guava线程池介绍
简介 ListenableFuture顾名思义就是可以监听的Future,它是对java原生Future的扩展增强。我们知道Future表示一个异步计算任务,当任务完成时可以得到计算结果。如果我们希望一旦计算完成就拿到结果展示给用户或者做另外的计算,就必须使用另一个线程不断的查询计算状态。这样做,代码复杂,而且效率低下。使用ListenableFuture Guava帮我们检测Future是否完成了,如果完成就自动调用回调函数,这样可以减少并发程序的复杂度。推............原创 2020-10-20 16:58:53 · 3982 阅读 · 0 评论