• 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类

    二、场景

  • 相关阅读:
    【bzoj1707/Usaco2007 Nov】tanning分配防晒霜——贪心+优先队列
    【bzoj1754/Usaco2005 qua】Bull Math——高精度乘法
    【bzoj1709/Usaco2007 Oct】Super Paintball超级弹珠——递推
    【bzoj2060/Usaco2010 Nov】Visiting Cows 拜访奶牛——树形dp
    【bzoj1710/Usaco2007 Open】Cheappal 廉价回文——区间dp
    【bzoj1828/Usaco2010 Mar】balloc 农场分配——贪心+差分+优先队列
    【bzoj4552/Tjoi2016&Heoi2016】排序——二分+线段树/平衡树+线段树分裂与合并
    【bzoj2083/Poi2010】Intelligence test——二分+贪心
    【bzoj1596/Usaco2008 Jan】电话网络——dfs
    【bzoj1782/Usaco2010 Feb】slowdown 慢慢游——dfs序+树状数组
  • 原文地址:https://www.cnblogs.com/ctxsdhy/p/8859559.html
Copyright © 2020-2023  润新知