专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Java并发同步常用处理方法

synchronized jdk内置同步锁
synchronized同步互斥锁+通知等待模式
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:
1)修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
2)修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
3)修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
4)修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。

AQS同步组件
1)CountDownLatch:闭锁,通过计数来保证线程是否需要一直阻塞
2)Semaphore:控制同一时间并发线程的数目
3)CyclicBarrier:和CountDownLatch相似,都能阻阻塞线程
4)ReentrantLock
5)Condition
6)Future、FutureTask

进程间同步互斥

/**
 * 进程间同步(FileLock文件锁,同时开启多个进程实例,若已获得锁的实例在执行,则后面的进程实例均只能等待,当然可以使用tryLock非阻塞模式)
 */
private void testFileLock() {
    File lockFile = new File(System.getProperty("user.dir") + File.separator + "app.lock");
    if (!lockFile.exists()) {
        try {
            if (!lockFile.createNewFile()) {
                System.out.printf("创建文件失败:" + lockFile.getAbsolutePath());
                return;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    try {
        FileChannel fileChannel = new FileOutputStream(lockFile).getChannel();
        String jvmName = ManagementFactory.getRuntimeMXBean().getName();
        System.out.printf("jvm ProcessName:%s, 准备获取锁 ... %n", jvmName);
        FileLock lock = fileChannel.lock();//获取文件锁
        for (int i = 0; i <= 100; i++) {
            try {
                Thread.sleep(100L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.printf("jvm ProcessName:%s, number:%d %n", jvmName, i);
        }
        lock.release();
        fileChannel.close();
        System.out.printf("jvm ProcessName:%s, 处理完成,释放锁 %n", jvmName);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

机器间同步互斥(即分布式锁)
1)基于DB实现(利用DB的更新独占锁)
2)基于Redis实现
实现方式1(原生实现):Redis分布式锁的正确实现方式(Java版)
实现方式2(Redlock):Redis分布式锁的官方算法RedLock以及Java版本实现库Redisson
3)基于Zookeeper实现
实现示例: java同步系列之zookeeper分布式锁

文章永久链接:https://tech.souyunku.com/24913

未经允许不得转载:搜云库技术团队 » Java并发同步常用处理方法

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们