android 线程同步方式

线程同步的几种方式

(1)同步函数

private synchronized void count() {
        if (count > 0) {
            Log.e(TAG, Thread.currentThread().getName() + "--->" + count--);
        } else {
            isRunning = false;
        }
    }

(2)同步代码块

  private void count() {
        synchronized (this) {
            if (count > 0) {
                Log.e(TAG, Thread.currentThread().getName() + "--->" + count--);
            } else {
                isRunning = false;
            }
        }
    }

(3)使用特殊域变量(volatile)实现线程同步

 private volatile int count = 1000;

  a.volatile关键字为域变量的访问提供了一种免锁机制,
  b.使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新,
  c.因此每次使用该域就要重新计算,而不是使用寄存器中的值
  d.volatile不会提供任何原子操作,它也不能用来修饰final类型的变量

(4)使用重入锁实现线程同步

ReentrantLock() : 创建一个ReentrantLock实例

lock() : 获得锁
unlock() : 释放锁

private void count() {
        lock.lock();
        if (count > 0) {
            Log.e(TAG, Thread.currentThread().getName() + "--->" + count--);
        } else {
            isRunning = false;
        }
        lock.unlock();
    }

猜你喜欢

转载自blog.csdn.net/k1234o/article/details/80763580