今日试图解决一个问题,就是在Android中实现多线程同步,但要求几个变量同时同步。
当时,首先想的是,一定得用Android或JAVA的本身机制。
发现有个叫CountDownLatch的机制。
CountDownLatch多线程同步类,可以协调多个线程之间的同步。
CountDownLatch的典型用法如下:
1)创建一个CountDownLatch实例,并确定需要等待的线程或任务数;
2)一个线程或任务完成,CountDownLatch计数器减一;
3)使用CountDownLatch.await(),等CountDownLatch的计数器为0,则运行。
CountDownLatch类里有三个重要的方法
//构造函数,设置引用计数数目
public CountDownLatch(int count){}
//调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行
public void await() throws InterruptedException { };
//和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行
public boolean await(long timeout, TimeUnit unit) throws InterruptedException { };
//将count值减1
public void countDown() { };
使用该方法,果然解决了该问题。
附注:
CountDownLatch和CyclicBarrier的区别:
1)CountDownLatch是一个计数器,计数器递减,用完为止;想使用必须重新构造或赋值;
2)CyclicBarrier的计数器像个阀门,到所有线程到达为止,可以进行reset并多次使用。