juc复习(下篇)(10.31)

juc复习(10.31)

阻塞队列

写入:如果队列满了,就必须阻塞等待

读取:如果队列是空的,必须阻塞等待生产

使用阻塞队列的情况

多线程并发处理,线程池

四组API
方式 抛出异常 有返回值不抛出异常 阻塞等待 超时等待
添加 add offer put offer(3个参数)
移除 remove poll take poll(两个参数)
检测队首元素 element peek - -
SynchronousQueue同步队列

没有容量

进去一个元素,必须等待取出来之后才能再往里放一个元素

  • 同步队列

  • 和其他的BlockingQueue 不一样, SynchronousQueue 不存储元素

  • put了一个元素,必须从里面先take取出来,否则不能在put进去值!

线程池

池化技术

事先准备好一些资源,用则拿走,用完则还

优化资源的使用,创建,销毁十分浪费资源

线程池的好处:

1、降低资源的消耗

2、提高响应的速度

3、方便管理。 线程复用、可以控制最大并发数、管理线程

三大方法

Executors 工具类、3大方法

ExecutorService threadPool = Executors.newSingleThreadExecutor();// 单个线 程

ExecutorService threadPool = Executors.newFixedThreadPool(5); // 创建一 个固定的线程池的大小

ExecutorService threadPool = Executors.newCachedThreadPool(); // 可伸缩 的

使用了线程池之后,使用线程池来创建线程

threadPool.execute()

线程池用完,程序结束,关闭线程池

threadPool.shutdown();

7大参数

ThreadPoolExecutor(

int corePoolSize, // 核心线程池大小

int maximumPoolSize, // 最大核心线程池大小

long keepAliveTime, // 超时了没有人调用就会释放

TimeUnit unit, // 超时单位

BlockingQueue<Runnable> workQueue, // 阻塞队列

ThreadFactory threadFactory, // 线程工厂:创建线程的,一般不用动

RejectedExecutionHandler handle // 拒绝策略

)

ExecutorService threadPool = new ThreadPoolExecutor(七大参数)

threadPool.execute()

threadPool.shutdown()

四种拒绝策略

  • new ThreadPoolExecutor.AbortPolicy() // 抛出异常

  • new ThreadPoolExecutor.CallerRunsPolicy() // 调用者处理

  • new ThreadPoolExecutor.DiscardPolicy() //队列满了,丢掉任务,不会抛出异常!

  • new ThreadPoolExecutor.DiscardOldestPolicy() //队列满了,尝试去和最早的竞争,也不会抛出异常

函数式接口

只有一个方法的接口

Function<参数类型,返回值类型> function = (参数)->{return 返回值;};

Predicate<参数类型> predicate = (参数)->{return 布尔类型; };

Consumer<参数类型> consumer = (参数)->{return;};

Supplier supplier = ()->{ return 返回值; };

ForkJoin

并行执行任务

ForkJoin 特点:工作窃取

双端队列

JMM

Java内存模型,抽象概念

Volatile 是 Java 虚拟机提供轻量级的同步机制

1、保证可见性 2、不保证原子性 3、禁止指令重排

关于JMM的一些同步的约定

1、线程解锁前,必须把共享变量立刻刷回主存。

2、线程加锁前,必须读取主存中的最新值到工作内存中

3、加锁和解锁是同一把锁

volatile可以避免指令重排

1、保证特定的操作的执行顺序

2、可以保证某些变量的内存可见性

Volatile 是可以保持可见性不能保证原子性

由于内存屏障可以保证避免指令重排的现象产生

猜你喜欢

转载自blog.csdn.net/m0_62261710/article/details/143403474
JUC