使用Java多线程方式来实现循环打印A、B并保证不乱序。
java在编写多线程程序时为了保证线程安全,需要对数据同步经常用到两种同步方式就是Synchronized和重入锁ReentrantLock。
ReentrantLock与synchronized关键字一样属于互斥锁,synchronized中的锁是非公平的(公平锁是指多个线程等待同一个锁时必须按照申请锁的时间顺序来依次获得锁),ReentrantLock默认情况下也是非公平的但可以通过带布尔值的构造函数要求使用公平锁。线程通过ReentrantLock的lock()方法获得锁用unlock()方法释放锁。
- ReentrantLock在等待锁时可以使用lockInterruptibly()方法选择中断 改为处理其他事情,而synchronized关键字线程需要一直等待下去。同样的tryLock()方法可以设置超时时间,用于在超时时间内一直获取不到锁时进行中断
- ReentrantLock拥有方便的方法用于获取正在等待锁的线程。
ReentrantLock的主要缺点是方法需要置于try-finally块中另外,开发人员需要负责获取和释放锁而开发人员常常忘记在finally中释放锁。