Android-Java-synchronized同步代码块的使用场景

时间:2021-11-30 08:02:23

synchronized同步代码块的使用场景 (满足以下两种条件,就要考虑使用synchronize同步代码块了)

1.被synchronized同步代码块{同步的代码},是被多次异步调用,什么叫多次异步调用? 例如:多线程,........(例如:getValue())

1.多次异步调用之--多线程案例:

package android.java.thread09;

public class Test5 implements Runnable {

    // 共享数据
int sum = 8; @Override
public void run() { while (true) { synchronized (Test5.class) { if (sum > 0) {
System.out.println("sum:" + sum);
sum -- ;
}
}
} } public static void main(String[] args) {
/**
* 定义Runnable实现类Test5,此实现类Test5不是线程,此实现类Test5给四个Thread去执行的
*/
Runnable test5 = new Test5(); // 实例化线程对象
Thread thread1 = new Thread(test5); // 此实现类Test5给Thread去执行的
Thread thread2 = new Thread(test5); // 此实现类Test5给Thread去执行的
Thread thread3 = new Thread(test5); // 此实现类Test5给Thread去执行的
Thread thread4 = new Thread(test5); // 此实现类Test5给Thread去执行的 // 开启启动线程
thread1.start(); // 启动第Thread-0线程
thread2.start(); // 启动第Thread-1线程
thread3.start(); // 启动第Thread-2线程
thread4.start(); // 启动第Thread-3线程 // 以上开启了四个线程 属于多线程了
}
}

2.多次异步调用之--方法被其他地方多次调用

package android.java.thread09;

public class Test6 {

    public  synchronized int getValue() {
int count = 0 /* 假设有着具体负责也业务逻辑运算取值等操作 */;
// ......
return 0;
} }

属于多次异步调用

例如:getValue(); 会被很多地方调用,是不是有可能出现同时调用的,就会出现安全问题,所以安全问题不仅仅出现在多线程,还出现在这种情况

Android-Java-synchronized同步代码块的使用场景


2.多线程或......只持有一把锁