同步代码块:解决多线程操作同一个数据的问题,只要有一个线程进入同步代码块中执行代码,锁就会关闭,其它线程必须等待里面的线程执行完毕后才能进去。
格式:
synchronized (任意锁对象) {
操作共享数据的代码
}
//注意:synchronized中的锁对象必须是唯一的
好处:解决了多线程的数据安全问题
弊端:当线程较多时,每个线程都会判断同步上的锁,耗费资源,降低程序运行效率
public static void main(String[] args) { MyRunnable mr = new MyRunnable(); Thread t1 = new Thread(mr); Thread t2 = new Thread(mr); Thread t3 = new Thread(mr); t1.setName("窗口1"); t2.setName("窗口2"); t3.setName("窗口3"); t1.start(); t2.start(); t3.start(); }
public class MyRunnable implements Runnable { private static int ticket = 100; private static Object obj = new Object(); @Override public void run() { while (true) { synchronized (obj) { if (ticket <= 0) { System.out.println("票卖完了"); break; } try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } ticket--; System.out.println(Thread.currentThread().getName() + "卖票了,还剩" + ticket + "张票"); } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!