juc总结

本文详细介绍了Java并发编程中的JUC(java.util.concurrent)工具包,包括并发基础、线程与进程、并发与并行的区别、线程状态、wait/sleep的区别、synchronized与Lock的对比、生产者消费者模型、并发集合的安全问题及解决方案,以及Callable接口、辅助类如CountDownLatch和CyclicBarrier、阻塞队列BlockingQueue、线程池和函数式接口等内容,旨在帮助读者全面理解Java并发编程的关键概念和技术。
摘要由CSDN通过智能技术生成

这里包括io、集合类和常用类
1、什么是juc

就是java.util三个工具包
1)java.util.concurrent
2)java.util.concurrent.atomic
3)java.util.concurrent.locks
2、为什么用juc
原因一:项目中有些业务无法用普通的Thread和Runnable实现,后者要用到了Thread静态代理来执行,后者比前者灵活,但和callable相比效率低没有返回值,所以使用callable,而这个就在juc下,Lock也在juc下。
2、线程和进程
进程:比如qq.exe执行后就是进程,而Java中jar包执行也是进程,程序集合是静态的,执行后就是动态的,即进程。
线程:一个进程包含多个线程,至少一个,而Java中是默认两个线程,分别是mian线程和gc线程,前者是用户线程,后者是守护线程,守护线程会随着用户线程结束而结束,类比生活中使用情况就是打开qq之后,在这个进程里可以启动听歌线程,也可以启动学习线程等。
3、并发和并行
并发:多线程操作同一个资源,如果cpu一核,则通过快速交替模拟出多条线程。(并发编程的本质:重复利用cpu的资源,等产品牛了肯定要考虑性能,那就必然用到并发编程,所以必须要会)
并行:多核cpu下,多个线程可以同时执行,比如线程池。(多个人一起行走)
4、线程有几种状态
源码中是6种:新生、运行、阻塞、等待(一直等)、超时等待和终止
简单来说应该是新生、运行、阻塞和终止四种状态。
5、wait和sleep区别
1)来源不同
wait是Object类下
sleep是juc下
2)是否释放锁
wait是清醒的,所以会释放锁
sleep是抱着锁睡觉,所以不释放锁
3)使用场景不同
wait是只能用于同步代码块中(需要某地等人)
sleep可以用在任何地方(一个人随时随地睡觉)
4)是否捕获异常
1)wait不需要捕获异常
2)sleep必须捕获异常
6、传统的Synchronized锁
写个三个人卖票的代码
以前是写个Ticket类然后实现Runnable接口,里面写总票加粗样式数这个属性,加上卖票的方法;然后在main函数中new Thread方法里放Runnable并执行start方法;
但实际项目中为了耦合度,所以不会让Ticket类实现Runnable接口,如果实现这个效果,只需要在main函数中的new Thread里面直接用Runnable的lambda表达式即可,for循环也写在这里,如下所示:

但明显这个代码是有线程安全的,所以可以在Ticket类卖票这个方法前面加上sychronzied。
7、Lock锁
Lock是juc下的一个接口,所以需要用到实现类,常用实现类是可重入锁ReentrantLock:
Lock lock = new ReentrantLock()
(可以改为有参构造,加上true࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值