线程安全

同步代码块:

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关键字可以修饰方法、代码块,但是不能修饰构造方法和属性。

原文地址:https://www.cnblogs.com/wintersong/p/4752606.html