===== synchronized ===== * 作用 * 多个线程依次执行某个代码块(串行执行),一个线程执行完后,通知其他线程继续执行 ===== wait ===== * 作用 * 暂停一个线程 * 会释放持有的锁(释放调用wait的那个锁。如果还拥有其他锁,则不会释放) * 特点 * 面向object * 使用不灵活,只能notify任意一个线程,或者所有线程 * wait必须先于notify/notifyAll之前调用。(否则就会错过信号) * 退出方式 * notify * interrupt ===== park ===== * 作用 * 暂停一个线程 * 特点 * 面向线程 * 使用灵活,可以对任意一个线程进行park(),unpark()操作 * unpark可以先于park之前调用 * unpark将信号量设置成1(可用),park将信号量设置成0(不可用) * 所以连续多次调用unpark其实没有效果 * 可以设置正在等待的对象(有利于排查问题) * 退出方式 * unpark * interrupt LockSupport.parkNanos(10); 注意,这里park 10纳秒,实际上park操作本身就消耗了50000纳秒,所以park(10),park(100),park(1000)性能其实差不了多少 ===== sleep ===== * 作用 * 睡眠 * 不会释放持有的锁 * 退出方式 * interrupt ===== join ===== * 作用thread2.join() 等待线程thread2退出 * 底层就是wait机制 ===== yield ===== 建议让出cpu(可能并不会让出)。程序中不能强依赖这种不确定性的逻辑