1.同步方式
Java中主要同步机制是关键字 synchronized (独占锁),volatile类型的变量、显示锁(Lock)、原子变量(volatile与CAS方式);
synchronized 加锁的含义不仅仅局限于互斥行为,还包括内存可见性,为了确保所有线程都能看到共享变量的最新值,所有执行读操作或者写操作的线程都必须在同一个锁上同步。同步代码块与同步方法是一样的,都是当前对象锁。
2. 线程安全
当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为;
无状态对象一定是线程安全的;
不可变对象一定是线程安全的(final),final域能确保初始化过程的安全性,从而可以不受限制地访问不可变对象,并在共享这些对象时无须同步;
要保持状态的一致性,就需要在单个原子操作中更新所有相关的状态变量;
3.锁
内置锁(监视器锁Monitor Lock) synchrnized 同步代码块;线程在进入同步代码块之前会自动获得锁,并且在退出同步代码块时自动释放锁。他是一种互斥锁,只有一个线