串行和并发

串行和并发

1、串行

多任务按照顺序依次执行 ,就好比一条单行道,里面有很多车,只要前车不前进,后面的车始终会被阻塞在那。

2、并发

多任务同时进行。 好比一条路有多条道,就可以同时通行多辆车。

3、进程和线程

线程安全: 单线程运行结果和多线程运行结果一致,安全,反之,则不安全

线程创建的方法: ①继承Thread ②实现Runnable 三实现callable接口

线程创建:Thread thread = new Thread(线程,”name”);

线程开启: thread.start();

4、线程同步

  1. 同步代码块
  2. 同步方法
  3. 同步锁
  4. volatile
  5. ThreadLocal
  6. LinkedBlockingQueue
  7. 原子操作 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锁在锁占用时会结束,可重入,可判断,可公平,适用场景为大量同步的代码同步问题

②死锁

基本条件: 互斥 不可剥夺 忙等待 请求保持

死锁处理: 死锁预防 死锁检测 死锁避免 有序资源分配 : 同类资源一次申请完,不同类依次申请 ;银行家算法


Author: Juntech
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Juntech !
评论
  TOC