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

    二、场景

  • 相关阅读:
    Servlet的PrintWriter out = response.getWriter()使用
    Java Performance Optimization Tools and Techniques for Turbocharged Apps--reference
    Scrum介绍——续
    Scrum介绍
    CMM能力成熟度模型
    自定义Spark Partitioner提升es-hadoop Bulk效率——续
    $digest already in progress 解决办法——续
    $digest already in progress 解决办法
    linux tcpdump 抓包
    Asterisk——part 1
  • 原文地址:https://www.cnblogs.com/ctxsdhy/p/8859559.html
Copyright © 2020-2023  润新知