使用场景:多线程,一个线程实时行情更新(insert + delete===>表),另一个线程从表里读取。。。两个线程同时执行 出现表id找不到----------》遇到这种情况就需要locked了!
(书面语:在多线程编程里面一个重要的概念是锁定,如果一个资源是多个线程共享的,为了保证数据的完整性,在进行事务性操作时需要将共享资源锁定,这样可以保证在做事务性操作时只有一个线程能对资源进行操作,从而保证数据的完整性。在5.0以前,锁定的功能是由Synchronized关键字来实现的。)
1》Lock lock =newReentrantLock();// 锁
lock.lock();// 取得锁
TODO:操作代码
lock.unlock();// 释放锁
-------------------------------------》顺序执行TODO
2》ReentrantReadWriteLock lock=new ReentrantReadWriteLock()
加锁:readLock().lock() writeLock().lock()
释放锁 :readLock().unlock() writeLock().unlock()
例如:在线程run()方法里1
1writeLock().lock() 2delete表3writeLock().unlock()
2
1readLock().lock()2 select表3readLock().unlock()
----------》线程再多都不会影响数据完整性!
(书面语:ReadWriteLock内置两个Lock,一个是读的Lock,一个是写的Lock。多个线程可同时得到读的Lock,但只有一个线程能得到写的Lock,而且写的Lock被锁定后,任何线程都不能得到Lock,ReadWriteLockTest很适合处理类似文件的读写操作)
网友评论