线程同步的优缺点
【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】解决方法:减少同步资源的定义,避免嵌套同步
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本