zoukankan      html  css  js  c++  java
  • Java中同步的几种实现方式

    1.使用synchronized关键字修饰类或者代码块;

    2.使用Volatile关键字修饰变量;

    3.在类中加入重入锁。

    代码示例:

    非同步状态下:

    public static void main(String[] args){
            Increase increase = new Increase();
            int count = 10;
            while (count != 0){
                new Thread(() -> {
                    increase.increasementAndPrint();
                }).start();
                count --;
            }
        }
    
        static class Increase {
            private int i = 0;
    
            void increasementAndPrint() {
                System.out.print(i++ + "
    ");
            }
        }

    这种情况下可能会导致多个线程输出的i相同:

    0
    0
    1
    2
    3
    4
    5
    6
    7
    8

    使用同步:

    1.使用synchronized关键字
    //保证原子性和有序性
    static class Increase {
            private int i = 0;
    
            synchronized void increasementAndPrint() {
                System.out.println(i++);
            }
        }
    2.使用volatile
    //保证原子性,不保证有序性
    static class Increase {
        private volatile int i = 0;
    
        void increasementAndPrint() {
            System.out.println(i++);
        }
    }
    3.使用重入锁
    //保证原子性和有序性
    static class Increase {
        private ReentrantLock reentrantLock = new ReentrantLock();
        private  int i = 0;
    
        void increasementAndPrint() {
            reentrantLock.lock();
            System.out.println(i++);
            reentrantLock.unlock();
        }
    }
  • 相关阅读:
    超参数调试、Batch正则化和程序框架
    优化算法
    深度学习的实用层面
    深层神经网络
    浅层神经网络
    一些实用的JavaScript代码
    mysql练习题1-41
    python 练习题(16-20)
    fiddler抓取https请求
    haproxy监控页面添加及参数简介(转)
  • 原文地址:https://www.cnblogs.com/microbear/p/7353746.html
Copyright © 2011-2022 走看看