加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程编程--心得

发布时间:2020-12-15 08:23:57 所属栏目:Java 来源:网络整理
导读:概念: (一).临界区 临界区用来表示一种公共资源,或者说是一种共享数据。它可以被多个线程使用,但是每一次只能有一个线程能使用它。一旦临界区被占有,那么其他的线程只能等待。 ?(二).死锁(Deadlock),活锁(Livelock),饥饿(Starvation) ? ?死锁是表示当

概念:

 (一).临界区

  临界区用来表示一种公共资源,或者说是一种共享数据。它可以被多个线程使用,但是每一次只能有一个线程能使用它。一旦临界区被占有,那么其他的线程只能等待。

 ?(二).死锁(Deadlock),活锁(Livelock),饥饿(Starvation)

  ??死锁是表示当多个线程互相持有对方所需要的锁,并一直等待的场景。假如有2个线程 A,B。当线程A在执行的过程中持有锁A,并且向下执行程序时需要锁B,那么线程A会等待锁B的释放。这个时候,恰巧线程B持有锁B,并释放的条件的需要持有锁A,那么线程A与B 都会僵持,等待对方释放。这样的场景就产生了死锁。

  ? 饥饿是表示,当某一个或者多个线程,由于某些原因(可能是由于优先级,或者一直在等待某个锁的释放等场景)迟迟无法获得所需要的资源的时候,就会产生饥饿。虽然线程的优先级并没法明确的功控制,但是饥饿的情况却时常发生。当然饥饿与死锁比起来,那就是饥饿在将来的某个时间肯定会被执行。

  ? 活锁的情况恰恰与上述2中情况不同,上面2种情况是想要却不可得。偏偏活锁却是一种互相谦让的状态。可以想象一个画面,当在大街上碰到一个迎面走来的人时,你会下意识的往左或者往右避免与对方相撞,但在这个时候对方也同时的往左或者往右,恰好与你的动作匹配上,然后2人各自左右谦让,导致一直过不去的场景!!这就是活锁。由于计算机没有人类的那么灵活只会死脑筋的不停谦让,导致资源一直在双方线程内来回跳动,双方都没有持有。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读