Java深入学习20:synchronized

 

先看一个没有synchronizd修饰的普通方法

 

public class SynTest implements  Runnable {
    private static int count ;
    public SynTest() {
        this.count = 0;
    }
    @Override
    public void run() {
        for(int i=0; i<5; i++){
            System.out.println(Thread.currentThread().getName() + ": " +(++count));
        }
    }
    public static void main(String[] args) {
        SynTest synTest = new SynTest();
        Thread thread1 = new Thread(synTest, "thread1");
        Thread thread2 = new Thread(synTest, "thread2");
        thread1.start();
        thread2.start();
    }
}
---------------------日志--------------------------
thread1: 1
thread2: 1
thread1: 2
thread2: 3
thread2: 5
thread2: 6
thread1: 4
thread2: 7
thread1: 8
thread1: 9

 

问题:两个线程并发,竞争资源,导致(1)获取相同的值(thread1: 1和thread2: 1); (2)输出结果顺序不可控

 

1- 修饰一个代码块

public class SynTest2 implements  Runnable {
    private static int count ;
    public SynTest2() {
        this.count = 0;
    }
    @Override
    public void run() {
        synchronized (this){
            for(int i=0; i<5; i++){
                System.out.println(Thread.currentThread().getName() + ": " +(++count));
            }
        }
    }
    public static void main(String[] args) {
        //方式1
        SynTest2 synTest = new SynTest2();
        Thread thread1 = new Thread(synTest, "thread1");
        Thread thread2 = new Thread(synTest, "thread2");
        thread1.start();
        thread2.start();

        //方式2
        SynTest2 synTest1 = new SynTest2();
        SynTest2 synTest2 = new SynTest2();
        Thread thread3 = new Thread(synTest1, "thread3");
        Thread thread4 = new Thread(synTest2, "thread4");
        thread3.start();
        thread4.start();
    }
}
----------------------单独执行方式1日志----------------------
thread1: 1
thread1: 2
thread1: 3
thread1: 4
thread1: 5
thread2: 6
thread2: 7
thread2: 8
thread2: 9
thread2: 10
----------------------单独执行方式2日志----------------------
thread3: 1
thread4: 2
thread3: 3
thread4: 4
thread3: 5
thread3: 7
thread3: 8
thread4: 6
thread4: 9
thread4: 10

 

 

 

END

posted on 2020-04-23 08:21  我不吃番茄  阅读(189)  评论(0编辑  收藏  举报