synchronized 解读

synchronized  同步锁,java自带的线程同步机制

为什么要使用 synchronized ?

当程序存在多个线程访问同一个变量是,不使用同步锁,可能会导致数据混乱,举个例子


    private String name="wang";

    private void test1() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Log.d("name",name);
            }
        }).start();
    }

    private void test2() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                name="li";
            }
        }).start();
    }

在不使用同步锁的情况下,当有两个以上的线程同时操作一个数据时容易发生数据混乱,在上面的例子中,我们无所确定log中打出的name是 wang还是li,因为两个线程是异步进行的,我们无法知道先后顺序,所以为了保证数据的安全,我们再程序设计时会用到同步锁,

synchronized 的用法:

1.synchronized (this)

2.

Object object=new Object(); 

synchronized (object)

3.

    private synchronized void test() {
      
    }

4.

public class A{
private void test() {
  synchronized (A.Class)
}
}

5.


    private synchronized static void test() {

    }

 

你可能感兴趣的:(java,synchronized,线程锁,java,基础,java,进阶)