Synchronized基本使用

2017-07-30  本文已影响9人  远o_O

一、概述

二、用法

三、注意事项

四、测试代码

package test;

import java.util.concurrent.LinkedTransferQueue;

public class SuspendTest {

    private static void getSome(){
        //静态同步块,只能锁class,不可以锁实例
        synchronized (SuspendTest.class){
            System.out.println(Thread.currentThread().getName());
            try {
                Thread.sleep(1000);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    private void setSome(){
        //只有同步块需要线程同步执行,同步口外面的可以并发执行
        //System.out.println(Thread.currentThread().getName());
        synchronized (this){
            System.out.println(Thread.currentThread().getName());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        SuspendTest suspendTest = new SuspendTest();
        suspendTest.test();
        //suspendTest.testStatic();
        SuspendTest suspendTest1 = new SuspendTest();
        suspendTest1.test();
        //suspendTest1.testStatic();
    }

    public void test(){
        new Thread(()->{setSome();}).start();
        new Thread(()->{setSome();}).start();
        new Thread(()->{setSome();}).start();
    }

    public static void testStatic(){
        new Thread(()->{getSome();}).start();
        new Thread(()->{getSome();}).start();
        new Thread(()->{getSome();}).start();
    }
}

上一篇下一篇

猜你喜欢

热点阅读