Java:面试必问系列:Java并发同步常用处理方法


Java:面试必问系列:Java并发同步常用处理方法

synchronized jdk内置同步锁synchronized同步互斥锁+通知等待模式synchronized是Java中的关键字 , 是一种同步锁 。 它修饰的对象有以下几种:1)修饰一个代码块 , 被修饰的代码块称为同步语句块 , 其作用的范围是大括号{括起来的代码 , 作用的对象是调用这个代码块的对象;2)修饰一个方法 , 被修饰的方法称为同步方法 , 其作用的范围是整个方法 , 作用的对象是调用这个方法的对象;3)修改一个静态的方法 , 其作用的范围是整个静态方法 , 作用的对象是这个类的所有对象;4)修改一个类 , 其作用的范围是synchronized后面括号括起来的部分 , 作用主的对象是这个类的所有对象 。
AQS同步组件1)CountDownLatch:闭锁 , 通过计数来保证线程是否需要一直阻塞2)Semaphore:控制同一时间并发线程的数目3)CyclicBarrier:和CountDownLatch相似 , 都能阻阻塞线程4)ReentrantLock5)Condition6)Future、FutureTask
【Java:面试必问系列: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();