• 线程安全


    同步代码块:

    public class Test {
    
        public static V v = new V();
    
        public static void main(String[] args) {
            Test t = new Test();
            t.fin();
    
        }
    
        public void fin() {
            new Thread(new Runnable() {
                public void run() {
                    while (true) {
                        v.printString("AAAAAAAAAAAAAAAAAAAAA");
                    }
    
                }
            }).start();
    
            new Thread(new Runnable() {
    
                @Override
                public void run() {
                    while (true) {
                        v.printString("BBBBBBBBBBBBBBBBBBB");
                    }
    
                }
            }).start();
    
        }
    
    }
    
    class V {
        Object lock = new Object();
    
        public void printString(String s) {
            synchronized (lock) {                              //若是不加此锁则会导致字符串的打印异常
                for (int i = 0; i < s.length(); i++) {
                    System.out.print(s.charAt(i));
                }
                System.out.println();
            }
        }
    }

    同步方法:

    synchronized关键字也可以放到方法上,这样整个方法就是同步的。同步监视器就是类对象本身this

    public synchronized void printString(String s){
                    for(int i = 0;i<s.length();i++){
                        System.out.print(s.charAt(i));
                    }
                    System.out.println();
                }
            }

    注意:synchronized关键字可以修饰方法、代码块,但是不能修饰构造方法和属性。

  • 相关阅读:
    C++ Call C# COM
    C ++ / CLI 语法
    C#调用C++ DLL动态库的两种方式
    Linux下的JMeter部署及使用
    同时处理多请求(带超时时间)
    同时处理多请求
    curl命令
    mysql命令
    SpringBoot配置文件敏感信息加密-jasypt
    spring boot升级到2.x的坑
  • 原文地址:https://www.cnblogs.com/wintersong/p/4752606.html
Copyright © 2020-2023  润新知