synchronized是对什么加锁?

来源:互联网 发布:女生打扮前 知乎 编辑:程序博客网 时间:2024/04/29 01:44

直接看代码

public class SynTest {    static int count = 0;    private int i;    public SynTest() {        i = (++count);    }    public synchronized void f(){        System.out.println("hello" + " " + i);        while (true) {        }    }    public static void main(String[] args) {        SynTest synTest = new SynTest();        SynTest synTest1 = new SynTest();        Thread thread = new Thread() {            @Override            public void run() {                synTest.f();            }        };        Thread thread1 = new Thread() {            @Override            public void run() {                synTest1.f();            }        };        thread.start();        thread1.start();    }}
/**hello 1hello 2*/

再来看这一个

public class SynTest {    static int count = 0;    private int i;    public SynTest() {        i = (++count);    }    public synchronized void f(){        System.out.println("hello" + " " + i);        while (true) {        }    }    public static void main(String[] args) {        SynTest synTest = new SynTest();        Thread thread = new Thread() {            @Override            public void run() {                synTest.f();            }        };        Thread thread1 = new Thread() {            @Override            public void run() {                synTest.f();            }        };        thread.start();        thread1.start();    }}
/**hello 1*/

对实例对象加锁

再来看代码

public class SynTest {    public static synchronized void f(){        System.out.println("hello");        while (true) {        }    }    public static void main(String[] args) {        SynTest synTest = new SynTest();        SynTest synTest1 = new SynTest();        Thread thread = new Thread() {            @Override            public void run() {                synTest.f();            }        };        Thread thread1 = new Thread() {            @Override            public void run() {                synTest1.f();            }        };        thread.start();        thread1.start();    }}
/**hello*/

对class对象加锁

然后synchronized代码块肯定是对显式的对象加锁

0 0