Java多线程之同步

来源:互联网 发布:ecshop分销系统源码 编辑:程序博客网 时间:2024/06/03 22:40

同步:两个或者两个以上的线程需要对共享对同一数据的存取。

如果不对共享数据进行同步处理,就会导致数据讹误。

方法有二:
1、使用关键字synchronized可以到达目的;
2、使用ReentrantLock类也可以到达目的;

使用ReentrantLock方法:
ReentrantLock():构建一个可以被用来保护临界区的可重入锁;
ReentrantLock(boolean fair):构建一个带有公平策略的锁。但是,并不是绝对公平的。
执行void lock():获取这个锁,如果锁被另一个线程拥有则发生阻塞;
执行void unlock():释放这个锁。

在ReentrantLock类中有Condition,代表条件锁。
调用ReentrantLock为方法newCondition()返回此锁的条件对象。

在Condition类中:
void await():将该线程放到条件的等待集中;
void signalAll():解除该条件的等待集中的所有线程的阻塞状态;
void signal():从该条件的等待集中随机第选择一个线程,解除其阻塞状态;

注意:wait、notifyAll以及notify方法是Object类的final方法。Condition方法必须被命名为await、signalAll和signal以便它们不会与那些方法发生冲突。

原创粉丝点击