多线程
本专栏主要是介绍java对多线程的支持,包括多线程的创建方式、线程的声明周期,线程状态,以及线程池的使用等
孟诸
coding
展开
-
多线程编程八-父子线程怎么共享数据(InheritableThreadLocal的使用)
在前面文章中我们已经通过ThreadLocal来实现线程级别的数据共享。那么如果子线程想访问父线程的数据该怎么做呢,InheritableThreadLocal可以帮助我们实现1 InheritableThreadLocal的使用测试代码private InheritableThreadLocal<Integer> inheritableThreadLocalData = new InheritableThreadLocal<>();private ThreadLo原创 2020-07-02 22:04:00 · 3491 阅读 · 0 评论 -
多线程编程七-Furture模式
Furture模式是把一个任务拆成多个子任务,没有依赖关系的子任务来并行执运行的模式,旨在提高程序处理效率假如说做饭需要三步,买菜(2秒)、买油(3秒)、炒菜(4秒)三步,其中买菜、买油可以两个人同时做,炒菜依赖买菜、买油的结果。private String buyVegetable() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace();...原创 2020-07-02 20:30:52 · 691 阅读 · 0 评论 -
多线程编程六-线程池的使用
目录1 JDK自带的线程池2 七大参数简介:3 线程池工作流程4 自定义拒绝策略5 和spring整合6 合理配置线程数1 JDK自带的线程池我们知道JDK可以通过Executors类来创建线程池,但是这些线程池都有缺点,所以在生产环境中我们要自定义线程池来使用Executors.newFixedThreadPool(),缺点:可能创建大量任务,导致oomExecutors.newCachedThreadPool(),缺点,可能创建大量线程,导致oomExecut.原创 2020-07-01 23:06:33 · 204 阅读 · 0 评论 -
多线程编程五-线程本地化(ThreadLocal)的使用
目录1 ThreadLocal概述2 ThreadLocal使用3 ThreadLocal原理3.1 set方法3.2 get方法3.3 remove方法4 使用ThreadLocal注意事项1 ThreadLocal概述我们知道单例模式有一个明显的缺点,就是存在并发问题。多线程修改、访问同一个对象的时候会出现与预期不相符的结果。解决并发问题可以通过加锁,但是存在性能问题。另一个方式就是可以用ThreadLocal,把对象做成一个线程级别的变量,每个线程都维护一..原创 2020-06-28 21:55:08 · 530 阅读 · 0 评论 -
多线程编程四-生产消费模型
目录1 定义生产者2 定义消费者3 定义admin接口4 SynchronizedAdmin实现5 ReentrantLockAdmin实现6 测试程序本次生产消费模型分别用synchronized和ReentrantLock实现思路:分为4部分,主程序、生产销售管理,生产者线程,消费者线程。生产销售管理中有商品数组,当前库存量,生产线方法,消费方法,分别在生产者和消费者run函数调用主程序创建管理系统对象,初始化生产者,消费者,启动线程。1 定义生产者class原创 2020-06-27 22:40:41 · 170 阅读 · 0 评论 -
多线程编程三-线程的状态切换
目录1 线程停止2 线程让步3 线程加入4 线程通信(wait和notify)1 线程停止Thread的stop方法已过时,通常情况下需要程序员自己写一些方法让线程停止。通常可以在线程内部做一个flag标识,通过flag判断线程是否继续执行public class ThreadStop { public static void main(String[] args){ RunnableThread rt = new RunnableThread(...原创 2020-06-27 22:36:56 · 242 阅读 · 0 评论 -
多线程编程二-线程的生命周期
线程有5个状态创建状态: Thread thread = new Thread();就绪状态: thread.start();运行状态: CPU调度处于就绪状态的线程时才是进入运行状态阻塞状态: 处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种: 1.等待阻塞 -- 运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态; ...原创 2020-06-27 22:33:52 · 94 阅读 · 0 评论 -
多线程编程一-创建线程的三种方式
目录1继承Thread类2 实现Runnable接口3 线程启动原理3.1 start 方法3.2 run方法4 实现Callable接口4.1 Callable初步使用4.2 Callable方法原理4.2.1 FutureTask run方法实现4.2.2 get方法4.2.3 FutureTask不可重复使用java支持三种线程创建方式:继承Thread类,实现Runnable接口,实现Callable接口1继承Thread类@Testp..原创 2020-06-26 23:43:59 · 286 阅读 · 3 评论