zoukankan      html  css  js  c++  java
  • Java多线程知识点

    一、基础

    1、线程管理

    两种创建线程方式:继承Thread类、实现Runnable接口,区别:实现接口方式还可以继承其他类,多个线程共享一个target对象,一般推荐采用

    线程的状态:new、runnable、blocked、waiting、time waiting、terminated

    中断判断:isInterrupted()、interrupted()

    中断控制:InterruptedException异常在检查到线程中断的时候会抛出

    等待线程的终止:join()方法

    守护线程:如果用户线程都退出了,守护线程也会退出,只要任何非守护线程还在运行,程序就不会终止。在start()之前调用setDaemon()方法,isDaemon()检查是不是守护线程

    异常处理:setUncaughtExceptionnHandler()方法设置线程运行时异常处理器

    局部变量的使用:ThreadLocal<T>接口,为每个线程存储了各自的属性值

    线程分组:Thread第一个入参ThreadGroup

    2、线程同步

    两种基本同步机制:synchronized关键字,Lock接口

    在同步代码中使用条件:wait()、notify()、notifyAll()

    Lock允许分离读写操作,相比synchronized也有更好的性能,lock()、unlock()、tryLock()

    读写锁:ReadWriteLock、ReentrantReadWriteLock

    修改锁的公平性:fair

    在锁中使用多条件:Condition、await()、signal()、signallAll()

    3、线程同步辅助

    资源并发访问控制:信号量Semaphore

    等待多个并发事件的完成:CountDownLatch

    在集合点的同步:CyclicBarrier

    并发阶段任务的运行和阶段切换:Phaser

    并发任务间的数据交换:Exchanger

    4、线程执行器

    创建执行器:使用ThreadPoolExecutor的四个构造器或Executors工厂类(如newCachedThreadPool())创建ThreadPoolExecutor对象

    固定大小的线程执行器:Executors工厂类的newFixedThreadPool()

    在执行器中执行任务并返回结果:让任务类实现Callable接口,在执行器中通过Future对象获得返回值

    运行多个任务处理第一个结果:ThreadPoolExecutor的invokeAny()

    运行多个任务处理所有结果:ThreadPoolExecutor的invokeAll()

    延时执行任务:ScheduledThreadPoolExecutor

    周期性执行任务:ScheduledThreadPoolExecutor的scheduleAtFixedRate()

    取消任务:Future的cancel()

    控制任务的完成:done()和isDone()

    分离任务的启动与结果的处理:CompletionService和ReportRequest

    执行被拒绝的服务:实现RejectedExecutionHandler接口的rejectedExecution()方法

    5、Fork/Join框架

    实现了工作窃取算法的线程池:ForkJoinPool,同步调用invoke(),异步调用execute()

    执行的任务的基类:ForkJoinTask

    任务没有返回结果需要实现:RecursiveAction,complete()

    任务有返回结果需要实现:RecursiveTask,complete()

    取消任务:ForkJoinPool的cancel()

    6、并发集合

    非阻塞式列表对应的实现类:ConcurrentLinkedDeque类

    阻塞式列表对应的实现类:LinkedBlockingDeque类

    用于数据生成或消费的阻塞式列表对应的实现类:LinkedTransferQueue类

    按优先级排序列表元素的阻塞式列表对应的实现类:PriorityBlockingQueue类

    带有延迟列表元素的阻塞式列表对应的实现类:DelayQueue类

    非阻塞式可遍历映射对应的实现类:ConcurrentSkipListMap类

    随机数字对应的实现类:ThreadLocalRandom类

    原子变量对应的实现类:AtomicLong和AtomicIntegerArray类

    二、场景

  • 相关阅读:
    【硬件】PCB设计步骤
    【modbus】modbus协议入门讲解
    【I2C】上拉电阻的选择
    【运放】失调电压、偏置电流
    【硬件】模拟地和数字地的隔离
    【电力】电流互感器和电压互感器
    【电力】为什么高电压传输时线路损耗小
    【办公】pdf转ppt的方法
    【EMC】电压暂降、短时中断和电压变化
    js 下的 split
  • 原文地址:https://www.cnblogs.com/ctxsdhy/p/8859559.html
Copyright © 2011-2022 走看看