死锁概念的具体实现

一:线程概念:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃 自己需要的同步 资源,就形成了线程的死锁. 出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于 阻塞状态,无法继续。

synchronized:隐试加锁,释放锁,可以锁定代码块,也可以锁定方法。

lock:可以显示的加锁,只能锁定代码块

package day05.demo2;
​
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
​
public class Dielock extends Thread{
        static  Object objA = new Object();
        static Object objB = new Object();
        boolean flag;
​
    public Dielock(boolean flag) {
        this.flag = flag;
    }
​
    @Override
    public void run() {
        if(flag){
            synchronized (objA) {
                System.out.println("ifobjA");
                synchronized (objB){
                    System.out.println("ifobjB");
                }
            }
        }else{
         synchronized (objB){
             System.out.println("elseobjB");
             synchronized (objA){
                 System.out.println("elseobjA");
             }
         }
        }
​
    }
}
package day05.demo2;
​
public class Test {
    public static void main(String[] args) {
        Dielock dielock1 = new Dielock(true);
        Dielock dielock2 = new Dielock(false);
        dielock1.start();
        dielock2.start();
​
    }
}
​
​
​

运行结果如下:

表明已经发生死锁

二线程通讯:指的是多个线程通过消息传递实现相互牵制,相互调度,即线程间的相

互作用。

涉及三个方法:wait(), notify(),notifyAll(),

wait一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。

.notify一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,

就唤醒优先级高的那个。 .notifyAll一旦执行此方法,就会唤醒所有被wait的线程。wait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方

法中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值