这段代码如何做到顺序输出而不堵塞的,我并没有释放锁?

2018-03-19  本文已影响0人  冰殇之刃

package com.wa.test;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.concurrent.BlockingQueue;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.TimeUnit;

import java.util.concurrent.locks.Condition;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

/**

* @Author:wangxin

* @Date:2018/3/19

* @version:1.0.0

*/

public class TestQueue {

    public static void main(String args[]) throws InterruptedException {

      final Lock lock = new ReentrantLock();

      final Condition condition = lock.newCondition();

      final Condition condition1 = lock.newCondition();

      final List<Integer> list = new ArrayList<Integer>(10);

      for(int i =0;i<9;i++){

          list.add(i);

      }

      Thread thread = new Thread(new Runnable() {

          public void run() {

              for(int i=0;i<9;i++) {

                  lock.tryLock();

                  lock.lock();

                  condition.signal();

                  System.out.println("1:" + list.get(i));

                  try {

                    condition1.await();

                  } catch (InterruptedException e) {

                      e.printStackTrace();

                  }

              }

          }

      });

        Thread thread1 = new Thread(new Runnable() {

            public void run() {

                for(int i=0;i<9;i++) {

                    lock.lock();

                    try {

                      condition.await();

                        System.out.println("2:" + list.get(i));

                      condition1.signal();

                        lock.tryLock();

                    } catch (InterruptedException e) {

                        e.printStackTrace();

                    }finally {

                    }

                }

            }

        });

      thread1.start();

      thread.start();

    }

}

上一篇下一篇

猜你喜欢

热点阅读