效率高,速度快 突破单cpu瓶颈上限java
线程安全:对同一个资源同一时刻操做的问题。 上下文切换安全
synchronized(Object.class) 锁住的是Class。 synchronized static method,锁住的是当前Class。并发
synchronized在进入代码块的时候分别造成monitorenter,monitorexit指令,在执行monitorenter指令的时候尝试获取锁对象,若是锁对象没有被锁或者是被当前线程锁住,则锁的计数器+1,monitorexit指令会让锁的计数器-1,减到0则释放对象的锁。由此synchronized是可重入的,不会出现本身把本身锁死.工具
支持公平锁/非公平锁 new ReentrantLock 支持获取锁中断机制 tryLock 支持Condition,能够更好的完成同步协调优化
ReentrantReadWriteLock.writeLock.lock() ReentrantReadWriteLock.writeLock.unlock()ui
Object.wait() Object.notify() Object.notifyAll()this
Semaphore semaphore.aquire() semaphore.release()线程
CountDownLatch countDownLatch.countDown(); countDownLatch.await();对象
Semaphore能够恢复。 CountDownLatch一次性的不能够恢复排序
CyclicBarrier cyclicBarrier.awai();
Exchanger 交换两个线程数据 exchanger.exchange(data1);
BlockingQueue
volatile 1.可见性. 内存分为主存,工做内存。线程工做的时候会把,从主存读取,同步到工做内存,更新到工做内存,某个时刻再同步到主存。volatile会保证数据更新当即同步主存,并将其余线程的工做内存中的值设为无效。使得其余线程是当即可见的变动值。
2.禁止指令重排序。 Object obj = new Object();
JVM会自动对字节码指令进行重排序优化,可能执行顺序是123,132,312被修饰的变量会禁止指令重排序。