区块链技术博客
www.b2bchain.cn

1114. 按序打印 三种方法

这篇文章主要介绍了1114. 按序打印 三种方法,通过具体代码讲解8185并且分析了1114. 按序打印 三种方法的详细步骤与相关技巧,需要的朋友可以参考下

本文实例讲述了1114. 按序打印 三种方法。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/?p=8185。具体如下:

AtomicInteger   0,1来保证

 //我们提供了一个类:  // //  //public class Foo { //  public void one() { print("one"); } //  public void two() { print("two"); } //  public void three() { print("three"); } //} //  // // 三个不同的线程将会共用一个 Foo 实例。  // //  // 线程 A 将会调用 one() 方法  // 线程 B 将会调用 two() 方法  // 线程 C 将会调用 three() 方法  //  // // 请设计修改程序,以确保 two() 方法在 one() 方法之后被执行,three() 方法在 two() 方法之后被执行。  // //  // // 示例 1:  // //  //输入: [1,2,3] //输出: "onetwothree" //解释:  //有三个线程会被异步启动。 //输入 [1,2,3] 表示线程 A 将会调用 one() 方法,线程 B 将会调用 two() 方法,线程 C 将会调用 three() 方法。 //正确的输出是 "onetwothree"。 //  // // 示例 2:  // //  //输入: [1,3,2] //输出: "onetwothree" //解释:  //输入 [1,3,2] 表示线程 A 将会调用 one() 方法,线程 B 将会调用 three() 方法,线程 C 将会调用 two() 方法。 //正确的输出是 "onetwothree"。  // //  // // 注意:  // // 尽管输入中的数字似乎暗示了顺序,但是我们并不保证线程在操作系统中的调度顺序。  // // 你看到的输入格式主要是为了确保测试的全面性。  // 👍 159 👎 0   import java.util.concurrent.atomic.AtomicInteger;  //leetcode submit region begin(Prohibit modification and deletion) class Foo {     //设置初始值0     private AtomicInteger s1=new AtomicInteger(0);     private AtomicInteger s2=new AtomicInteger(0);     public Foo() {      }      public void first(Runnable printFirst) throws InterruptedException {                  // printFirst.run() outputs "first". Do not change or remove this line.         printFirst.run();         s1.incrementAndGet();     }      public void second(Runnable printSecond) throws InterruptedException {         while (s1.get()!=1){}         // printSecond.run() outputs "second". Do not change or remove this line.         printSecond.run();         s2.incrementAndGet();     }      public void third(Runnable printThird) throws InterruptedException {         while(s2.get()!=1){}         // printThird.run() outputs "third". Do not change or remove this line.         printThird.run();     } } //leetcode submit region end(Prohibit modification and deletion) 

 

CountdDwnLatch    await()  为0才执行  后面的 countDown

 class Foo {           private CountDownLatch a ;      private    CountDownLatch b ;     public Foo() {       a=new CountDownLatch(1);       b=new CountDownLatch(1);     }      public void first(Runnable printFirst) throws InterruptedException {              // printFirst.run() outputs "first". Do not change or remove this line.         printFirst.run();         a.countDown();     }      public void second(Runnable printSecond) throws InterruptedException {             a.await();         // printSecond.run() outputs "second". Do not change or remove this line.         printSecond.run();         b.countDown();     }      public void third(Runnable printThird) throws InterruptedException {         b.await();         // printThird.run() outputs "third". Do not change or remove this line.         printThird.run();     } }

 

Semaphore 信号量 为1才继续执行 acquire() release()

 class Foo {     private Semaphore  s1;     private Semaphore  s2;     public Foo() {         s1=new Semaphore(0);         s2=new Semaphore(0);     }      public void first(Runnable printFirst) throws InterruptedException {                  // printFirst.run() outputs "first". Do not change or remove this line.         printFirst.run();         s1.release();     }      public void second(Runnable printSecond) throws InterruptedException {         s1.acquire();         // printSecond.run() outputs "second". Do not change or remove this line.         printSecond.run();         s2.release();     }      public void third(Runnable printThird) throws InterruptedException {         s2.acquire();         // printThird.run() outputs "third". Do not change or remove this line.         printThird.run();     } }

 

本文地址https://www.b2bchain.cn/?p=8185

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 1114. 按序打印 三种方法
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们