美文网首页
CountDownLatch

CountDownLatch

作者: 天之見證 | 来源:发表于2019-07-09 17:34 被阅读0次

    1. CountDownLatch 代码示例

    CountDownLatch 将代码的执行通过CountDownLatch#await的方法切成多块,以满足时序的要求

    import java.util.concurrent.CountDownLatch
    
    object Driver {
      val N: Int = 5
    
      def main(args: Array[String]): Unit = {
        val startSignal = new CountDownLatch(1)
        val doneSignal = new CountDownLatch(N)
    
        1.to(N).foreach{ id =>
          new Thread(new Worker(id, startSignal, doneSignal)).start()
        }
    
        startSignal.countDown()
        println("start:")
        doneSignal.await()
      }
    }
    
    class Worker(id: Int, startSignal: CountDownLatch, donwSignal: CountDownLatch) extends Runnable {
      override def run(): Unit = {
        try {
          startSignal.await()
          doWork()
          donwSignal.countDown()
        }
      }
    
      def doWork(): Unit = {
        println(s"work $id is running")
      }
    }
    
    time driver worker
    startSignal.await()
    startSignal.countDown()
    doneSignal.await()
    donwSignal.countDown()

    2. scala实现类似的写法

    object CountDownLatchDemo {
      import scala.concurrent.{Await, Future}
      import scala.concurrent.ExecutionContext.Implicits.global
      import scala.concurrent.duration._
    
      def main(args: Array[String]): Unit = {
        val n = 5
        val workerFutures = 1.to(n).map{ id =>
          Future{
            println(s"work $id is running")
          }
        }
    
        val driverFuture = Future.sequence(workerFutures)
        Await.result(driverFuture, 10.seconds)
        println("all done")
      }
    }
    

    相关文章

      网友评论

          本文标题:CountDownLatch

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