Java并发编程

线程状态转换

线程状态.png

方法调用是否释放锁

wait 是
sleep 否
join 释放调用对象的锁(见如下代码)

synchronized(obj){
      thread.join(); // join不释放thread的锁
}
synchronized(thread){
      thread.join();// join释放锁
}

线程间通信的方式

  1. volatile、synchronize、lock。(保证可见性)
  2. wait、notify、notifyAll、singal
  3. Thread.join()
  4. ThreadLocal
  5. 线程中断。

Java内存模型

volatile关键字(保证可见性;禁止指令重排序)

双重检查锁的单例实现

private volatile static Singleton singleton;

    public static Singleton getInstance() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }

基于类初始化的解决方案

public class InstanceFactory{
    private static class Instance{
        public static Instance instance = new Instance();
    }
    public static Instance getInstance(){
        return Instance.instance;
    }
}

原子操作类

基本类型(AtomicInteger)、数组类型、引用类型、字段类型

并发工具类

CountDownLatch
CyclidBarrier
Semaphore
Exchanger

如果保证多线程的执行顺序?

阻塞队列与非阻塞队列

非阻塞队列
ConcurrentLinkedQueue

阻塞队列
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
DelayQueue
SynchronousQueue
LinkedTransferQueue
LinkedBlockingDeque

Fork/Join框架

Executor框架

Executor框架UML图.jpeg

7个核心参数
核心线程数、任务队列、最大线程数、线程工厂、拒绝策略、存活时间、存活时间单位
拒绝策略:直接抛异常、调用线程执行、丢弃一个最近的任务、不处理、自定义处理--实现RejectExecutionHandler接口

如何合理配置线程池???

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java并发编程 进程和线程的区别 进程和线程的由来 串行。初期的计算机智能串行执行任务,并且需要长时间等待用户输...
    CallMeMrZ阅读 279评论 0 0
  • 一 多线程基础 1.1 线程的状态及其变更 1.2涉及到的各种方法 Thread.start()让线程进入就绪状态...
    清雨季阅读 697评论 0 5
  • 目录: 线程基础 线程池 各种各样的锁 并发容器 原子类 Java 内存模型 线程协作 AQS 框架 一、线程基础...
    王英豪阅读 544评论 0 2
  • 前言:Java从诞生开始就明智地选择了内置对多线程的支持,这使得Java语言相比同一时期的其他语言具有的有事.线程...
    叫我胖虎大人阅读 284评论 0 0
  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 11,388评论 4 56