synchronized用于实现同步处理,保证共享数据的安全性
* 数据有安全性问题的原因:1、共享数据 2、修改数据
* synchronized相对于volatile是重量级的线程安全的方法,可以保证3大特性:原子性、可见性、有序性。可以将并发操作转换为串型执行
*用于静态方法,锁对象为当前类
*public static synchronized void pp(){}
* 用于非静态方法,锁对象为当前类的对象
* public synchronized void pp(){}
* 用于代码块,锁对象为指定的对象
*synchronized(obj){}
synchronized用法:
用法1:同步代码块
private final static String LOCK="lock1";
synchronized (LOCK) {}
synchronized用法2:同步方法 在方法上添加同步关键字,当前的锁对象为当前对象no---对象锁.
以new出来的NumOper对象充当锁,当前对象内的所有synchronized方法在不同线程调用时互斥,但是可以直接访问非synchronized方法。注意synchronized允许持有锁的线程重入.
public synchronized void add() {
System.out.println(Thread.currentThread() + "....add...begin:" + this.num);
this.num++;
sub();</