1、什么是JUC
:::tips
:::
java.util 工具包
:::tips

:::
2、线程和进程
进程:一个程序,程序的集合;
一个进程可以包含多个线程,至少包含一个
Java默认有几个线程:main、GC
线程:对于Java而言,Thread、Runable、Callable
Java真的可以开启多个线程吗
不可以,只能通过native方法进行调用,java无法操作硬件
并发:同一时间段
并行:同一时间(必须多核)
//获取CPU的核数//CPU密集型,IO密集型System.out.println(Runtime.getRuntime().availableProcessors());
并发编程的本质:充分利用cpu的资源
线程有几个状态
共6个
public enum State {//新生NEW,//运行RUNNABLE,//阻塞BLOCKED,//等待,死死的等WAITING,//超时等待TIMED_WAITING,//终止TERMINATED;}
wait/sleep的区别
1、来自不同的类
wait — Object
sleep — Thread
2、关于锁的释放
wait会释放锁,sleep抱着锁睡觉,不会释放
3、使用的范围不同
- wait 必须在同步代码块中睡
- sleep 可以在任何地方睡
4、异常的捕获
wait 不需要捕获异常 目前需要捕获了
sleep 必须捕获异常
3、Lock锁

一个接口和三个实现类

代码实现

通过构造方法来定义是否为公平锁
- 公平锁:十分公平,先来后到
- 非公平锁:十分不公平,可以插队(默认)
传统Synchronized
class Ticket{private int num=50;public synchronized void sale(){if(num>0){System.out.println(Thread.currentThread().getName()+"卖出了"+(num--));}}}
Lock
//Lock锁class Ticket2{private int num=50;Lock lock = new ReentrantLock();public synchronized void sale(){lock.lock();try {if(num>0){System.out.println(Thread.currentThread().getName()+"卖出了"+(num--));}}catch (Exception e){e.printStackTrace();}finally {lock.unlock();}}}
区别:
:::tips
1、Synchronized 是内置的关键字,Lock是一个java类
2、Synchronized 无法获取锁的状态,Lock可以判断是否获取到了锁
3、Synchronized 会自动释放锁,Lock锁必须要释放锁,否则会死锁
4、Synchronized 线程之间串行执行,一个阻塞,影响后续;Lock就不一定
5、Synchronized 可重入锁,不可以中断,非公平;Lock,可重入,可以自己设置公平性
6、Synchronized 时候锁少量的代码同步问题,Lock适合大量的同步代码
:::
