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

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

作者: 冰殇之刃 | 来源:发表于2018-03-19 22:45 被阅读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();

        }

    }

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/oaumqftx.html