线程同步的优缺点

【1】对比:

线程安全效率低

线程不安全,效率高

【2】可能造成死锁

死锁

》不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁

》出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续

【3】代码演示

复制代码
package com.test09;

/**
 * @author : liu
 * 日期:14:53:22
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class TestDeadLock implements Runnable{
    public  int flag=1;
    static Object o1=new Object(),o2=new Object();
    @Override
    public void run() {
        System.out.println("flag="+flag);
        //当flag==1锁住o1
        if (flag==1){
            synchronized (o1){
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //只要锁住o2就完成
                synchronized (o2){
                    System.out.println("2");
                }
            }
        }
        if(flag==0){
            synchronized (o2){
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //只要锁住o1就完成
                synchronized (o1){
                    System.out.println("3");
                }
            }

        }

    }
}
class Test{
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        TestDeadLock td1=new TestDeadLock();
        TestDeadLock td2=new TestDeadLock();
        td1.flag=1;
        td2.flag=0;
        Thread t1=new Thread(td1);
        Thread t2=new Thread(td2);
        t1.start();
        t2.start();
    }
}
复制代码

【4】解决方法:减少同步资源的定义,避免嵌套同步

posted @   爱的加勒比  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示