并发笔记(一)

基本概念

  • 同步与异步
    • 同步方法等待返回,异步方法立即返回
  • 并发和并行
    • 并行是两个任务同时进行,并发是两个任务切换执行
    • 并发是交替的执行
    • 并行是多个任务真实的同时执行
  • 临界区
    • 公共资源或者共享数据,可以被多个线程使用。但每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程想要使用这个资源就必须等待
  • 阻塞和非阻塞
    • 如果一个线程占用了临界区资源,其他的线程就得在这个临界区中等待,这就是阻塞;非阻塞强调没有一个线程可以妨碍其他线程执行
  • 死锁、饥饿、活锁
    • 死锁:两个及两个以上的进程互相等待,【哲学家进餐】;总是按照一个全局的固定顺序获取锁,可避免死锁
    • 活锁:多个线程谦让导致无法使用资源
    • 饥饿:某一个或多个线程一直占用资源,使其他需要资源的线程无法执行
  • 并发级别
    • 阻塞: 当一个线程进入临界区之后,其他线程必须等待
    • 无饥饿:非公平锁会导致低优先级的线程饥饿,而公平锁饥饿就不会产生
    • 无障碍:自由出入临界区,无竞争时有限步内完成操作,有竞争时回滚数据
    • 无锁:无障碍,保证有一个线程可以胜出
    • 无等待:无锁,要求所有线程都必须在有限步内完成,无饥饿
  • JMM的特性
    • Atomicity: 一个操作不可中断
    • Visibility: 一个线程修改了某一个变量值,其他线程能否立即获取到这个改动值
    • Ordering: 对于一个线程来说,它内部的执行顺序一定是一致的,多个线程之间涉及到指令重排,所以顺序是没有保障的
  • Happen-before规则:指令重排的原则:
    • 程序顺序原则:一个线程内保证语义的串行性
    • volatile规则:volatile变量的写先发生于读,保证了volatile变量的可见性
    • 锁规则:解锁必然发生在加锁前
    • 传递性:A先于,B先于C,那么A一定先于C
    • 线程的start()方法先于它的每一个动作
    • 线程的所有操作先于线程的终结
    • 线程的中断先于被中断线程的代码
    • 对象的构造函数执行、结束先于finalize()方法
  • synchronized的用法:
    • 指定加锁对象
    • 作用于实例方法
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值