随笔分类 -  java多线程

摘要:CopyOnWriteArrayList CopyOnWrite思想就是将原来的数据copy一份出来修改,然后把修改后的数据替换原来的数据。在setArray之前并发读到的还是旧数据,弱一致性。 public boolean add(E e) { synchronized (lock) { Obje 阅读全文
posted @ 2022-10-30 14:40 扶不起的刘阿斗 阅读(35) 评论(0) 推荐(0)
摘要:java8比较实用的一个多线程api 开启一个异步任务supplyAsync public static void main(String[] args) { ExecutorService executor = Executors.newCachedThreadPool(); Supplier<L 阅读全文
posted @ 2022-03-27 14:46 扶不起的刘阿斗 阅读(772) 评论(0) 推荐(0)
摘要:大纲: 线程池的状态 构造函数 线程池执行任务的过程 Worker 线程池执行任务的主要方法 中断线程池主要方法 简要说明: 版本java1.8 以ThreadPoolExecutor线程池为代表介绍线程池。 一、线程池的状态 线程池由5个状态(ThreadPoolExecutor类中由5个常量标识 阅读全文
posted @ 2020-03-24 23:29 扶不起的刘阿斗 阅读(288) 评论(0) 推荐(0)
摘要:大纲: java线程的中断原则 中断相关方法 中断实例 一、java线程中断原则 java中断是一种协作机制,每一个线程的中断都由线程自己处理,其他线程只是给要中断的线程一个中断标志。 二、相关方法 1.把线程对象的中断标志置为true public void interrupt() 2.判断线程对 阅读全文
posted @ 2020-03-24 21:35 扶不起的刘阿斗 阅读(334) 评论(0) 推荐(1)
摘要:大纲: AbstractQueuedSynchronizer简介 aqs基本结构 lock流程 unlock流程 signal、await流程 Semaphore.acquire 一、AbstractQueuedSynchronizer简介 AbstractQueuedSynchronizer(抽象 阅读全文
posted @ 2019-05-22 18:58 扶不起的刘阿斗 阅读(675) 评论(0) 推荐(0)
摘要:主要成员变量: 构造函数: 主要方法: 应用: 结果: 上例中模拟4人到齐后才会各自开始做某事。但有5个人准备,当4个人到达CyclicBarrier后barrierAction先执行,barrierAction执行完成后,栅栏打开放开4个线程。最后一个到达线程的person0将被阻塞等待3个线程到 阅读全文
posted @ 2019-04-08 17:17 扶不起的刘阿斗 阅读(344) 评论(0) 推荐(0)
摘要:CountDownLatch 主要方法: 应用: 结果: 上例中模拟一个主服务和3个子服务启动,主服务的启动依赖子服务启动,只有当3个子服务都启动完成后主服务才会执行启动。 要点: 阅读全文
posted @ 2019-04-03 17:38 扶不起的刘阿斗 阅读(254) 评论(0) 推荐(0)
摘要:大纲 一、BlockingQueue接口 二、ArrayBlockingQueue 主要成员变量 构造函数 主要方法 取: 存: 阻塞队列阻塞的存取值方法通过2个condition的await和signal方法完成:当队列空时notEmpty.await取值阻塞,当队列满时notFull.await 阅读全文
posted @ 2019-03-30 15:10 扶不起的刘阿斗 阅读(374) 评论(0) 推荐(0)
摘要:大纲: 用法 源码 引用及内存泄漏 一、用法 ThreadLocal是一个容器,顾名思义就是把一个变量存到线程本地。 实际应用:中事务传播的时候将连接对象存入threadloacl,可以在同一个线程不同的代理类中被拿到。 class Test { public static void main(St 阅读全文
posted @ 2019-03-04 15:49 扶不起的刘阿斗 阅读(1499) 评论(0) 推荐(0)
摘要:大纲: 一、cas cas:compareAndSwap,一种乐观锁。 cas思想:cas需要三个值,v是内存值,e是期望值,n是要修改的值。当内存中的值v等于预期值e(说明内存中的值没有被其他线程修改)、才可以修改v为n。 cas伪代码 cas是unsafe类中的native方法,是原子操作,保证 阅读全文
posted @ 2019-03-01 17:32 扶不起的刘阿斗 阅读(530) 评论(0) 推荐(1)
摘要:大纲: 一、wait、notify、notifyAll 二、Condition 三、生产消费者 生产者、消费者线程轮流执行,操作同一个资源。 消费者: 生产者: 资源对象-wait,notify实现: 资源对象-condition实现: 测试类 阅读全文
posted @ 2019-02-13 14:49 扶不起的刘阿斗 阅读(351) 评论(0) 推荐(0)
摘要:大纲: 一、ReadWriteLock 二、ReentrantReadWriteLock是ReadWriteLock的实现类 三、ReentrantReadWriteLock使用 官方demo:更新缓存后的锁降级,保持读锁。 阅读全文
posted @ 2019-01-25 15:40 扶不起的刘阿斗 阅读(284) 评论(0) 推荐(0)
摘要:大纲: Lock接口 synchronized&Lock异同 一、Lock public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); bo 阅读全文
posted @ 2019-01-24 11:38 扶不起的刘阿斗 阅读(218) 评论(0) 推荐(0)
摘要:线程共6状态 图片摘自:http://www.cnblogs.com/trust-freedom/p/6606594.html 阅读全文
posted @ 2018-12-18 16:21 扶不起的刘阿斗 阅读(179) 评论(0) 推荐(0)
摘要:大纲 sleep: 注意:sleep方法并不释放锁。 yield: yield是一个本地静态方法。 yield表示当前线程申请交出执行权,但并不是一定会交出,依赖于系统的线程调度。 因此该方法并不稳定。 注意:yield 方法放弃执行权但并不释放锁。 join: 之前看了一些博客说join就是把多线 阅读全文
posted @ 2018-12-14 17:55 扶不起的刘阿斗 阅读(205) 评论(0) 推荐(0)
摘要:大纲: 线程安全问题 synchronized代码块 原理简述 一、线程安全问题 多线程操作各自线程创建的资源的时候,不存在线程安全问题。但多线程操作同一个资源的时候就会出现线程安全问题。下例为两个线程操作同一个name资源时发生的问题。 class TestSyn { public static 阅读全文
posted @ 2018-12-07 17:26 扶不起的刘阿斗 阅读(418) 评论(0) 推荐(0)
摘要:大纲: 一、java创建线程--继承Thead类 创建一个类继承Thead类,并重写run方法。 二、java创建线程--实现Runnable接口 创建一个类实现Runnable接口,并重写run方法。 三、java创建线程--实现Callable接口 Callable接口中只有一个call方法,任 阅读全文
posted @ 2018-11-12 11:53 扶不起的刘阿斗 阅读(142) 评论(0) 推荐(0)
摘要:大纲: 一、java内存模型 java所有变量值都存在主内存里,每一个线程又拥有自己的工作内存,线程对变量的读写都在工作内存里完成,工作内存间相互隔离。 二、可见性、原子性、有序性 可见性:指当多个线程访问同一变量时,一个线程修改了这个变量的值,其他线程能访问这个变量是永远能够获取更新后的值。 保证 阅读全文
posted @ 2018-10-25 09:36 扶不起的刘阿斗 阅读(221) 评论(0) 推荐(0)