多线程
liao0801_123
这个作者很懒,什么都没留下…
展开
-
什么时候会抛出InterruptedException,如何处理InterruptedException
何时会出现InterruptedException? 当一个线程处于阻塞状态下(例如休眠)的情况下,调用了该线程的interrupt()方法,则会出现InterruptedException。 @Test public void testName() throws Exception { // 被中断的线程 final Thread t = new Thread(){ @Override public转载 2020-06-01 16:06:40 · 5473 阅读 · 1 评论 -
多线程ForkJoinPool介绍及使用
背景:ForkJoinPool的优势在于,可以充分利用多cpu,多核cpu的优势,把一个任务拆分成多个“小任务”,把多个“小任务”放到多个处理器核心上并行执行;当多个“小任务”执行完成之后,再将这些执行结果合并起来即可。这种思想值得学习。主要参考《疯狂java讲义》使用Java7 提供了ForkJoinPool来支持将一个任务拆分成多个“小任务”并行计算,再把多个“小任务”的结果合...原创 2019-09-25 16:32:16 · 1364 阅读 · 0 评论 -
线程探讨
public static void main(String[] args) throws InterruptedException { //ruleStatisMap 是volatile/static修饰的concurrentHashmap并且已经初始化 /** * 情况一 */ //无线程安全问题 RuleUtils.ruleStatisMap.put("12...原创 2019-05-28 10:47:25 · 101 阅读 · 0 评论 -
单例模式探究
一般我们写单例模式要达到懒加载+线程安全+高性能一般会使用双锁检测DCL写法,如下:public class Singleton { private volatile static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { ...原创 2019-04-03 17:16:13 · 81 阅读 · 0 评论 -
如何设计一个抢红包系统(商品秒杀同理)
参考资料:https://www.jianshu.com/p/c4a743bbe3a4这种情况下要解决的问题:同一时间同时进行抢购,网站瞬时访问流量激增。 访问请求数量远远大于库存数量,但是只有少部分用户能够秒杀成功(高并发访问的数据安全性)。优化思路数据预处理,系统启动时将红包(商品)信息存到缓存中,并用唯一id进行标识,将后续逻辑精简为维护用户与ID的关系。 异步处理,将后续...原创 2019-02-25 18:40:03 · 8382 阅读 · 3 评论 -
并发环境下的 查询-修改-持久化 解决方案
问题背景: 用户购物,扣费流程 多线程扣费操作部分(针对具体某一个客户) 1)先获取用户的余额 2)拿该用户扣除费用后的余额更新用户余额表。 3)更新扣费成功标志。 4)扣费完成。 同一个客户不同订单并发处理时,两个线程可能同时获取到的余额都是10000,而更新余额时后面的更新操作会覆盖前面的更新操作,即实际只扣除后一笔记录的费用,而前一笔记录的扣费标...原创 2019-01-15 20:18:42 · 363 阅读 · 0 评论 -
通过Thread类getAllStackTraces方法自定义线程监控页面
<div class="star"> <% out.println("线程数量:" + Thread.getAllStackTraces().size()); for (Map.Entry<Thread, StackTraceElement[]> stackTrace : Thread.getAllStackTraces().entrySet(...原创 2018-12-17 14:02:29 · 1105 阅读 · 0 评论 -
自己实现的java线程池
第一次实现的线程池(错误,有问题) import java.util.ArrayList;import java.util.List;import java.util.concurrent.LinkedBlockingQueue;public class TreadPool extends Pool{ /* 1. maxSize 线程池允许创建的最大线程数。当workQue...原创 2018-12-05 17:38:44 · 162 阅读 · 0 评论 -
阿里巴巴开发手册 (技术类)
【强制】POJO类中布尔类型的变量,都不要加is前缀,否则部分框架解析会引起序列化错误。反例:定义为基本数据类型Boolean isDeleted的属性,它的方法也是isDeleted(),RPC框架在反向解析的时候,“误以为”对应的属性名称是deleted,导致属性获取不到,进而抛出异常。【推荐】如果模块、接口、类、方法使用了设计模式,在命名时需体现出具体模式。 说明:将设计模式体现在名...原创 2018-12-07 19:07:14 · 1183 阅读 · 0 评论 -
Thread类应用,多线程
关于join方法调用逻辑Parent 调用 child.join(),child.join() 再调用 child.join(0) (此时 Parent 会获得 child 实例作为锁,其他线程可以进入 child.join() ,但不可以进入 child.join(0), 因为无法获取锁)。child.join(0) 会不断地检查 child 线程是否是 Active。如果 c...原创 2018-11-20 14:43:22 · 96 阅读 · 0 评论 -
Quartz定时任务调度器堵塞原理和解决
Quartz 调度器以多线程的方式执行调度任务JobDetail,缺省线程池大小为10,也就是说若调度器中已有10个Job在工作(线程没有结束),那么即使有JobDetail到了被触发的时间,新的JobDetail不会被执行,也就是说阻塞的条件是,调度器中正在运行的JobDetail数量达到了设定值10。 举一个具体的例子:a. 单一Job配置:JobA 触发时间为 每秒运行一...原创 2018-11-07 17:04:39 · 8347 阅读 · 2 评论 -
Java并发编程:volatile关键字解析
https://www.cnblogs.com/dolphin0520/p/3920373.html 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2)禁止进行指令重排序。 volatile这个关键字可能...原创 2018-11-02 14:21:34 · 93 阅读 · 0 评论 -
原子操作类AtomicInteger详解
为什么需要AtomicInteger原子操作类?对于全局变量的数值类型操作 num++,若没有加synchronized关键字则是线程不安全的,num++解析为num=num+1,明显,这个操作不具备原子性,多线程时必然会出现问题。测试下:public class AtomicIntegerTest1 { public static int count = 0; pu...转载 2018-11-01 19:12:03 · 631 阅读 · 0 评论 -
分批处理接口(抽象类)代码实例
package com.util;import java.util.List;/** * * @description 分批回调执行方法接口 * */public interface BatchHandlerInterface<T> { /** * 分批回调方法 需重写此方法 * */ public void handler(Lis...原创 2018-07-19 11:00:09 · 411 阅读 · 0 评论 -
Spring线程池ThreadPoolTaskExecutor的底层及阻塞队列
spring线程池ThreadPoolTaskExecutor与阻塞队列BlockingQueue排版好看的资料: https://juejin.im/post/5a743c526fb9a063557d7ebablockingqueue参考资料:https://blog.csdn.net/vernonzheng/article/details/8247564转自: https://ww...转载 2018-07-10 11:25:23 · 9634 阅读 · 2 评论 -
java死锁与demo
所谓死锁就是进程循环等待它方占有的资源而无限制的僵持下去的局面。以一个简单的例子来解释:一个桥,最多可以通过一个车子,但是左右两边都来了车子,而且都上了桥,左边的车子,占用了左边的桥资源,二右边的车子,占用了右边的桥的资源。左边的车子等待右边的车子让出右边的资源,但是右边的车子却要左边的车子让出左边的资源。双方都不放弃自己所占有的资源,却都想着让对方让出自己的资源,这就会无限制的等待...原创 2018-05-22 17:43:31 · 355 阅读 · 0 评论