首页 > 其他分享 >synchronized的monitor监视器

synchronized的monitor监视器

时间:2024-11-05 12:01:21浏览次数:2  
标签:monitor synchronized void System SneakyThrows 监视器 println public out

public class T {

    @SneakyThrows
    public static void main(String[] args) {
        System.out.println("此行后加锁 monitorenter");
        synchronized (T.class){
            System.out.println("hello monitor");
        }
        System.out.println("此行前释放锁 monitorexit");
    }

}

反汇编字节码:javap -c T

线程争抢锁

示例

需求:正确计数

synchronized

public class T {

    int i = 0;

    @SneakyThrows
    public static void main(String[] args) {
        T t = new T();
        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                t.countSafe();
            }).start();
        }
    }

    //计数错误
    @SneakyThrows
    public void count() {
        Thread.sleep(100);
        i++;
        System.out.println(i);
    }

    //线程安全 正确计数
    @SneakyThrows
    public synchronized void countSafe() {
        Thread.sleep(100);
        i++;
        System.out.println(i);
    }
}

AtomicInteger

public class T {

    AtomicInteger count = new AtomicInteger(1);

    @SneakyThrows
    public static void main(String[] args) {
        T t = new T();
        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                t.countSafe();
            }).start();
        }
    }

    //线程安全 正确计数
    @SneakyThrows
    public void countSafe() {
        Thread.sleep(300);
        System.out.println(count.getAndIncrement());
    }
}

标签:monitor,synchronized,void,System,SneakyThrows,监视器,println,public,out
From: https://www.cnblogs.com/goodluckxiaotuanzi/p/18527540

相关文章

  • Java多线程编程(三)一>详解synchronized, 死锁,wait和notify
    目录: 一.synchronized的使用:   二. 常见死锁情况: 三.如何避免死锁:  四.wait和notify一.synchronized的使用: 我们知道synchronized锁具有互斥的特点:synchronized会起到互斥效果,某个线程执行到某个对象的synchronized中时,其他线程如果也执......
  • IllegalMonitorStateException:Illegal Monitor Operation 完美解决方法 ⚙️
    ......
  • synchronized
    静态方法跟普通的synchronized方法有所区别,需要特别注意的是,虽然静态的同步方法仅允许同时只有一个线程参与访问,但与此同时其他线程依然可以访问另一个由synchronized修饰的非静态方法。在这里,虽然两个线程都是访问同一个对象实例上的方法(其中一个是静态方法,而另一个不是),但是这......
  • 【Azure Developer】使用JavaScript通过SDK进行monitor-query的client认证报错问题
    问题描述使用JavaScript通过SDK进行monitor-query的client初始化时候,需要进行认证时报错AADSTS90002。代码如下:constcredential=newDefaultAzureCredential();constlogsQueryClient=newLogsQueryClient(credential,{endpoint:"https://api.loganalytics.azur......
  • 线程安全、synchronized和volatile关键字
    一、什么是线程安全?多线程下并发同时对共享数据进行读写,会造成数据混乱=线程不安全当多线程并发访问临界资源时,如果破坏其原子性、可见性、有序性,可能会造成数据不一致。临界资源:共享资源(同一对象)同时读写,一次仅允许一个线程使用,才可保证其正确性。1.1synchronizedsync......
  • 并发编程中锁Synchronized和ReentrantLock,CAS,AQS理解
    SynchronizedJAVA关键字,独占式的悲观锁,可重入锁。主要解决多个线程之间的访问资源的同步性,可以保证被他修饰的方法或者代码块在任意时刻只能有一个线程执行早期是重量级锁,JAVA6后引入大量优化,自旋锁,适应性自旋锁,偏向锁,轻量级锁,锁消除,锁粗化减少锁的开销使用方式修饰......
  • Mongodb 性能监控工具FreeMonitoring,mongostat,mongotop,Profiler,索引,分片,事务超时,Mongo
    db.users.createIndex({username:'hashed'})1#创建唯一索引db.values.createIndex({title:1},{unique:true})2#复合索引支持唯一性约束db.values.createIndex({title:1,type:1},{unique:true})3#多键索引支持唯一性约束db.inventory.createIndex({ratings:1},{uni......
  • 【JavaEE】【多线程】synchronized和死锁
    目录一、synchronized详解1.1互斥1.2可重入二、死锁2.1死锁成因2.2避免死锁一、synchronized详解1.1互斥synchronized会起到互斥效果,某个线程执行到某个对象的synchronized中时,其他线程如果也执行到同一个对象synchronized就会阻塞等待.语法:sy......
  • Synchronized锁和Reentrantlock的区别和联系以及锁升级
    二者的底层实现:Synchronized就是基于monitor对象主要的为Owner获得这个锁资源的线程唯一标识符(线程ID)Count线程获得几次锁(可重入锁的实现)ContentionList等待队列(线程加锁失败的情况下)Reentrantlock是基于AQS这个就是表示是哪一个线程获得这个锁资源    ......
  • JAVA基础: synchronized 和 lock的区别、synchronized锁机制与升级
    1synchronized和lock的区别synchronized是一个关键字,lock是一个接口,实际使用的是实现类synchronized通过触发的是系统级别的锁机制,lock是API级别的锁机制synchronized自动获得锁,自动释放锁。lock需要通过方法获得锁并释放锁synchronized可以修饰代码段和方法,lock......