高龄白菜JAVA学习第十三天(线程池|线程总结|JUC并发编程1)

2021/7/10 1:06:04

本文主要是介绍高龄白菜JAVA学习第十三天(线程池|线程总结|JUC并发编程1),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、线程池
使用线程池可以提高性能,避免频繁的创建销毁
好处:
1).提高响应速度 (减少创建新线程的时间)
2).降低资源消耗 (重复利用线程池中的线程)
3).便于线程管理

1.ExecutorService:真正的线程池接口 常见子类是ThreadPoolExecutor
2.Executors:工具类,线程池的工厂类,用于创建并返回不同的线程池
在这里插入图片描述

二、线程总结
在这里插入图片描述
JUC
1.什么是JUC(缩写)
java.util.concurrent
java.util.concurrent.atomic(原子性)
java.util.concurrent.locks
这3个包
Runnable没有返回值,效率相比于Callable较低
JAVA默认有两个线程 main GC
JAVA无法直接操作硬件,通过底层的本地方法(C++)调用

2.并发编程的本质:充分利用CPU的资源
线程状态: new新生\ runnable运行 \blocked阻塞\waiting等待\timed_waitng超时等待\terminated终止

3.wait和sleep的区别
(1.所在类不同
wait—Object sleep—Thread
(2.锁的释放
wait会释放锁
(3. 使用的范围不同
wait必须在同步代码块中使用,sleep任何地方都可以
(4.异常捕获
wait不需要捕获异常

4.Lock锁(重点)
传统:synchronized

Lock接口有三个实现类 可重入锁(常用) 可重入的读锁 可重入的写锁
可重入锁中有公平锁和非公平锁,默认为非公平锁
公平锁:先来后到;非公平锁:可以插队
在这里插入图片描述
synchronized和lock的区别
1、synchronized是JAVA的一个内置关键字 lock是一个类
2、synchronized无法判断锁的状态,lock可以通过trylock()方法判断锁的状态
3、synchronized非公平 lock默认非公平,但可以设置
4、synchronized适合少量的代码同步问题,lock适合锁大量的同步代码
5、synchronized会自动释放锁,lock必须要手动释放
6、synchronized线程1获得锁之后,线程2会死等,lock锁不一定会等下去

5、生产者和消费者问题(Lock版)
在这里插入图片描述
注意:为防止线程被虚假唤醒,等待应总是出现在循环中,将if换成while



这篇关于高龄白菜JAVA学习第十三天(线程池|线程总结|JUC并发编程1)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程