欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

JAVA并发同步互斥实现方式总结,

来源: javaer 分享于  点击 37610 次 点评:191

JAVA并发同步互斥实现方式总结,


大家都知道加锁是用来在并发情况防止同一个资源被多方抢占的有效手段,加锁其实就是同步互斥(或称独占)也行,即:同一时间不论有多少并发请求,只有一个能处理,其余要么排队等待,要么放弃执行。关于锁的实现网上大把的例子,我这里只是梳理与总结一下,以便参考方便。

同步互斥按作用范围可分为:

  • 进程间同步互斥

    
        /**
         * 进程间同步(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();
            }
    
    
        }
  • 机器间同步互斥(即分布式锁)

  • ​ *有同时列出三种实现方案的文章,可参见: Java分布式锁三种实现方案

    相关文章

      暂无相关文章
    相关栏目:

    用户点评