串行和并发
串行和并发
1、串行
多任务按照顺序依次执行 ,就好比一条单行道,里面有很多车,只要前车不前进,后面的车始终会被阻塞在那。
2、并发
多任务同时进行。 好比一条路有多条道,就可以同时通行多辆车。
3、进程和线程
线程安全: 单线程运行结果和多线程运行结果一致,安全,反之,则不安全
线程创建的方法: ①继承Thread ②实现Runnable 三实现callable接口
线程创建:Thread thread = new Thread(线程,”name");
线程开启: thread.start();
4、线程同步
- 同步代码块
- 同步方法
- 同步锁
- volatile
- ThreadLocal
- LinkedBlockingQueue
- 原子操作 Atomic
4.1同步代码块 synchronized
1、添加对象: private Object obj = new Object();
2、加锁(代码块) synchronized (obj) {代码块} 给对象加锁
4.2 同步方法
synchronized, 不写static,是使用锁对象
4.3 同步锁 Reenreantlock
lock() unlock()
加同步锁 释放同步锁
private Lock lock = new Reenreantlock(true);
true ------------>公平锁 ,多线程公平拥有执行权
false------------>非公平,独占,默认锁
加锁方法: lock.lock()
释放锁: lock.ublock()
加try代码块在try代码块里加锁,最后在finnally里面释放锁
注意:lock调用后,要使用unlock释放锁,不然会发生死锁
5 小结
①线程安全小结
1、synchronized : java关键字,jvm层面,无法获得锁的状态,会自动释放锁,多线程获锁需等待,可重入,不可中断,非公平锁,适用场景为代码少量的同步
2、lock: java类,可获取锁的状态,需要在finanlly中使用unlock释放锁,容易造成死锁,lock锁在锁占用时会结束,可重入,可判断,可公平,适用场景为大量同步的代码同步问题
②死锁
基本条件: 互斥 不可剥夺 忙等待 请求保持
死锁处理: 死锁预防 死锁检测 死锁避免 有序资源分配 : 同类资源一次申请完,不同类依次申请 ;银行家算法
更多详情
设置为vip可见的都可访问下面链接地址,即可观看原文
更多详情请访问: juntech