线程同步的四种机制
线程同步有四种机制,分别是临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)
- 临界区:
多个线程访问同一个共享资源的时候,有一个线程进入公共资源(任意时刻只允许一个线程访问的资源)后,其他打算访问的线程被挂起,那么这个公共资源可以被称为临界区,当在临界区被释放时,其他线程才可进入。 - 互斥量:
采用互斥对象机制(例如被声明 synchronized加锁的方法) - 信号量:
在资源限制的线程数内,允许多个线程访问的数量。 - 事 件:
通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作
Callback回调函数:
在需要使用的时候,设置Callback接口,并在里面设置需要回调的方法:
void interface CallBack{
public void constant(int i);
}
在需要传参数的方法内实现
int i = 3;
CallBack mCallBack;
mCallBack.constant(i);
在需要响应的方法设置:
CallBack mCallBack = new CallBack() {
@Override
public void constant(int i) {
Log.w("DDD",String.valueOf(i));
}
};
有效利用多线程的关键是理解程序是并发执行而不是串行执行的。例如:程序中有两个子系统需要并发执行,这时候就需要利用多线程编程。
通过对多线程的使用,可以编写出非常高效的程序。不过请注意,如果你创建太多的线程,程序执行的效率实际上是降低了,而不是提升了。
请记住,上下文的切换开销也很重要,如果你创建了太多的线程,CPU花费在上下文的切换的时间将多于执行程序的时间!