一、java锁
(1).线程的状态。
新建线程、
终止线程、
线程中断、
等待(wait)和通知(notify)
挂起(suspend)和继续执行(resume)线程
等待线程结束(join)和谦让(yield)
(2).5种加锁方式
synchronized关键字修饰的方法
synchronized关键字修饰的语句块
特殊域变量(Volatile)修饰成员变量
重入锁ReentrantLock实现线程同步
ThreadLocal实现同步机制
具体参考http://developer.51cto.com/art/201509/490965.htm
(3).ReentrantLock重入锁,优点和几个重要方法
1.lock()。获得锁,如果锁已经被占用,则等待。
2.lockInterruptibly(),获得锁,但优先响应中断。
3.tryLock(),尝试获得锁,如果成功,返回true,失败返回false。该方法不等待,立即返回。
4.tryLock(long time,TimeUnit unit),在给定时间内尝试获得锁。
5.unlock(),释放锁
Condition 条件
await(),会使当前线程等待,同时释放当前锁,当其他线程中使用signal()或者signalAll()方法
法时,线程会重新获得锁并继续执行。或者当前线程被中断时,也能跳出等待。这和Object.wait()
方法很相似。
awaitUninterruptibly()方法与await方法基本相同,但是它并不会在等待过程中响应中断。
singal()方法用于唤醒一个在等待中的线程。相对的singalAll()方法会唤醒所有在等待中的
线程。这个Object.notify()很类似
(4).允许多个线程同时访问:信号量(Semaphore)
synchronized还是ReentrantLock,一次都只允许一个线程访问一个资源,而信号量却可以
指定多个线程,同时访问某一个资源。信号量主要提供了以下构造函数:
public Semaphore(int permits)
public Semaphore(int permits,boolean fair)//第二个参数可以指定是否公平
(5).ReadWriteLock读写锁
(6).CountDownLatch计时器
是一个非常实用的多线程控制工具类。

二、线程池
(1).线程池:在使用线程池后,创建线程变成了从线程池获得空闲线程,关闭线程变成了向
池子归还线程。
ThreadPoolExecutor
主要方法:
execute()
submit()
shutdown()
shutdownNow()
execute()方法实际上是Executor中声明的方法,在ThreadPoolExecutor进行了具体的实现,这个方法是ThreadPoolExecutor的核心方法,通过这个方法可以向线程池提交一个任务,交由线程池去执行。
  submit()方法是在ExecutorService中声明的方法,在AbstractExecutorService就已经有了具体的实现,在ThreadPoolExecutor中并没有对其进行重写,这个方法也是用来向线程池提交任务的,但是它和execute()方法不同,它能够返回任务执行的结果,去看submit()方法的实现,会发现它实际上还是调用的execute()方法,只不过它利用了Future来获取任务执行结果(Future相关内容将在下一篇讲述)。
  shutdown()和shutdownNow()是用来关闭线程池的。
(2).Fork/join框架 (分而治之)
三、分布式锁: