Lock()实现提供了比使用synchronized方法和语句可获得更广泛的锁定操作。
private Lock lock =new ReentrantLock();
被锁的代码要用 lock.lock() lock.unlock() 包括。其中用try 。。。finally包围
同步:效率低,如果出现同步嵌套,会出现死锁。 但是安全。
死锁问题:两个或者两个以上的线程在争夺资源的过程中,发生的一种相互等待的现象
线程间通信,不同种类的线程针对同一资源的操作。
多线程还可能出现同一个数据出现多次,或者输出不匹配问题。都属于线程安全问题。
等待 唤醒机制
Object类中wait()等待 notify()唤醒单个线程 notifyAll()唤醒所有线程
这些方法调用必须通过锁对象调用,二我们刚才使用的锁对象是任意锁对象。
wait()要用try catch包围 用唤醒notify()来解决死锁
即一个run()里判断一个条件,如果成立就锁调用wait(),如果不成立,锁的判断条件改变,然后调用notify()唤醒。
运行状态图: