随笔分类 - 高并发与多线程
摘要:设计思路:保证每个线程中共享资源的独立性 ExecutionTask QueryFromDBAction业务逻辑执行者1 QueryFromHttpAction业务逻辑执行者2 Context共享资源 测试 使用ThreadLocal来实现线程上下文设计模式,实现线程之间的隔离 ExecutionT
阅读全文
摘要:The Thread-Specific Storage 线程保险箱 官方解释 This class provides thread-local variables. These variables differ from their normal counterparts in that each
阅读全文
摘要:场景:A:正在厨房炒菜B:您的快递到了,请接收A:等我把这盘菜炒好再接收,请稍等 请求类 请求队列 客户端 服务端 测试类 注意:在有wait(),sleep(),while时打断线程要注意特殊处理
阅读全文
摘要:Future设计模式核心思想是实现业务逻辑从串行化执行到异步和异步回调 示例一: 测试结果:必须等待 result 获取到才执行 I am done. 优化一:实际的业务被提前调用执行,当我们需要的时候再主动通过 get() 获取返回的数据 Future接口 FutureTask接口 FutureS
阅读全文
摘要:immutable特点: 1.不可变对象一定是线程安全的(里面的任何属性或者引用类型的属性一旦被初始化,都不能被修改)2.可变对象不一定是不安全的 StringBuffer 题外话: J2EE中servlet 全局只创建一个对象,不是线程安全的struts 1.x Action也不是线程安全的,只创
阅读全文
摘要:一、concern conflict(同时发生以下两种操作是否会发生数据冲突) 1.read read false 可以并行化2.write read true 需要串行化3.read write true 需要串行化4.write write true 需要串行化 二、多线程读写锁分离 读写锁 共
阅读全文
摘要:门 过门人 测试代码 测试结果:不是线程安全的,当pass()上加synchronized时线程安全 但是将数据的读写都加在一个锁里面,极大影响程序执行效率,怎样优化?
阅读全文
摘要:ObservableRunnable LifeCycleListener ThreadLifeCycleObserver 测试代码:
阅读全文
摘要:被观察者(事件源) 观察者抽象类 观察者1-二进制观察者 观察者2-八进制观察者 测试类
阅读全文
摘要:一个简单的java内存模型图: 从图中可以看出,当是多核cpu时,每个cpu都有一个独立的高速缓存,多个线程会在多个cpu中独立执行当对一个变量只是读操作的时候,jvm自作多情的做了一个优化,只是访问缓存的数据,只有进行写操作的时候,会刷新主内存的数据执行如下操作:i=1;i=i+1;cpu1:ma
阅读全文
摘要:闲话少叙,上代码 测试结果,出现两种情况: 1.INIT_VALUE被volatile关键字修饰时,READER线程是可以感知到UPDATER的变化 2.INIT_VALUE缺少volatile关键字修饰时,READER线程感知不到UPDATER的变化 volatile可以保证内存可见性,有序性,不
阅读全文
摘要:代码演示 测试一:验证线程从wait set中被唤醒的顺序不一定是FIFO 测试二:验证线程被唤醒后,必须重新去获取锁,会记录之前wait的位置,在wait的位置继续往下执行 注意:线程不能进行自我唤醒,必须由其它线程唤醒
阅读全文
摘要:饿汉式 缺点:不能进行懒加载,可能会造成资源浪费 懒汉式 缺点:不能保证线程绝对安全,尤其是new SingletonObject1()中加载比较重的v资源时 介绍三种比较优雅的v单例模式: 1.双重检查改良版 缺点:虽然解决了线程安全问题,但是jvm的一些底层优化操作被摒弃 2.holder方式
阅读全文
摘要:给线程池增加自动扩充线程数量,以及闲时自动回收的功能
阅读全文
摘要:给线程池增加拒绝策略和停止方法
阅读全文
摘要:该线程池只创建了默认的线程数量,不包含拒绝策略,线程池的打断、销毁和自动扩展线程数量,只保持了线程的最低性能,只是极简版,之后的文章会慢慢扩展 可参考文章: https://blog.csdn.net/const_/article/details/89317907
阅读全文
摘要:线程池概念 简单理解,它就是一个管理线程的池子。 它帮我们管理线程,避免增加创建线程和销毁线程的资源损耗。因为线程其实也是一个对象,创建一个对象,需要经过类加载过程,销毁一个对象,需要走GC垃圾回收流程,都是需要资源开销的。 提高响应速度。 如果任务到达了,相对于从线程池拿线程,重新去创建一条线程执
阅读全文
摘要:官方解释 A thread group represents a set of threads. In addition, a thread group can also include other thread groups. The thread groups form a tree in wh
阅读全文
摘要:使用了setUncaughtExceptionHandler后会把异常处理交给setUncaughtExceptionHandler,线程里面的异常不再输出日志信息
阅读全文