静态的同步方法
锁对象是谁
不能是this
this是创建对象之后产生的,静态方法优先于对象
静态方法的所对象是本类class属性---》class文件对象
举例:
Lock锁
从JDK 5.0开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当。
ReentrantLock类实现了Lock ,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是ReentrantLock,可以显示锁,释放锁
synchronized与lock的异同:
相同点:二者都可以解决线程安全问题
不同点:synchronized机制为执行完相应同步代码块后,自动释放同步监视器,而lock则需要手动启动同步(使用lock()方法),并且结束同步也需要手动实现(使用unlock()方法)
作用:Lock锁可以解决并发编程中出现多个线程同时访问一个共享
优势:Lock锁可以让某个线程在持续获取同步锁失败后返回,不再继续等待,Lock锁在使用时也更加灵活。
加锁lock
释放锁unlock
举例:
public class Runnablesd implements Runnable{ static int ticket = 100; Lock object = new ReentrantLock(); @Override public void run() { while (true){ object.lock(); if (ticket<=0){ object.unlock(); break; } try { Thread.sleep(10); } catch (InterruptedException e) { } System.out.println(Thread.currentThread().getName()+ticket); ticket--; object.unlock(); } } }
public static void main(String[] args) { Runnablesd runnablesd = new Runnablesd(); Thread thread = new Thread(runnablesd); Thread thread1 = new Thread(runnablesd); Thread thread2 = new Thread(runnablesd); thread.start(); thread1.start(); thread2.start(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)