synchronized是对什么加锁?

    xiaoxiao2021-04-15  42

    直接看代码

    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 1 hello 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代码块肯定是对显式的对象加锁

    转载请注明原文地址: https://ju.6miu.com/read-671321.html

    最新回复(0)