面试

线程同步及通信机制

2016-12-21  本文已影响52人  某昆

线程同步

线程同步是保证多线程安全访问竞争资源的一种手段

线程间通信

线程间往往需要协调,共同完全某项工作,需要线程间互相通信,控制不同线程间的状态

线程同步及通信的方式有多种,本文将总结常见的两类方式。

ps:因为最后一次循环中,B调用wait,进入阻塞状态,而A已经执行完所有代码,处理死亡状态了,没有其它线程会唤醒B,B将一直处于阻塞状态,程序不会停止,所以在A内部循环结束后,唤醒一次B,这样程序可以顺序停止

  Lock lock2 = new ReentrantLock();
  Condition conditionC = lock2.newCondition();
  Condition conditionD = lock2.newCondition();

  private Runnable C = new Runnable() {
    public void run() {
        while (countC > 0) {
            lock2.lock();
            try{
                System.out.println("C");
                countC --;
                try {
                    conditionD.signal();
                    conditionC.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }finally{
                lock2.unlock();
            }
        }
        lock2.lock();
        conditionD.signal();
        lock2.unlock();
    }
  };

private Runnable D = new Runnable() {
    public void run() {
        while (countD > 0) {
            lock2.lock();
            try{
                System.out.println("D");
                countD --;
                try {
                    conditionC.signal();
                    conditionD.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }finally{
                lock2.unlock();
            }
        }
    }
  };

其它线程同步方式

仅实现线程同步还有许多方式,在此不再仔细详细,仅简单记录下

上一篇下一篇

猜你喜欢

热点阅读