leetcode中怎么利用多线程打印零与奇偶数

  介绍

这期内容当中小编将会给大家带来有关leetcode中怎么利用多线程打印零与奇偶数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

假设有这么一个类:

类ZeroEvenOdd {
,,公共ZeroEvenOdd (int n) {…},,,,//构造函数
,公共空间零(printNumber) {…},//仅打印出0
,甚至公共空间(printNumber) {…},//仅打印出偶数
,公共空奇怪(printNumber) {…},//仅打印出奇数
}
相同的一个,ZeroEvenOdd 类实例将会传递给三个不同的线程:

线程一个将调用,0(),它只输出0。
线程B将调用,即使是(),它只输出偶数。
线程C将调用,奇怪的(),它只输出奇数。
每个线程都有一个,printNumber方法来输出一个整数。请修改给出的代码以输出整数序列,010203040506……,其中序列的长度必须为2 n。

,

示例1:

输入:n=2
输出:“0102“
说明:三条线程异步执行,其中一个调用零(),另一个线程调甚至用(),最后一个线程调用奇怪的()。正确的输出为“0102“。
示例2:

输入:n=5
输出:“0102030405“

实现方案1——传统方式

 package  com.lau.multithread.printoddeven;
  
  import  java.util.concurrent.ExecutorService;
  import  java.util.concurrent.Executors;
  import  java.util.concurrent.atomic.AtomicInteger;
  import  java.util.function.Consumer;/* *,
  *大敌;
  ,*打印零与奇偶数,实现方案,传统方式
  假设有这么一个类:
  
  class  ZeroEvenOdd  {
  public 才能ZeroEvenOdd (int  n),{,,,},,,,,,//,构造函数
  public 才能;void 零(printNumber),{,,,},,//,仅打印出,0
  public 才能;void 甚至(printNumber),{,,,},,//,仅打印出,偶数
  public 才能;void 奇怪(printNumber),{,,,},,,//,仅打印出,奇数
  }
  相同的一个,ZeroEvenOdd 类实例将会传递给三个不同的线程:
  
  线程,A 将调用,0(),它只输出,0,。
  线程,B 将调用,即使是(),它只输出偶数。
  线程,C 将调用,奇怪的(),它只输出奇数。
  每个线程都有一个,printNumber 方法来输出一个整数。请修改给出的代码以输出整数序列,010203040506……,,其中序列的长度必须为,2 n。
  
  ,
  
  示例,1:
  
  输入:n =2
  输出:“0102”;
  说明:三条线程异步执行,其中一个调用,0(),另一个线程调用,即使是(),最后一个线程调用奇怪的()。正确的输出为,“0102“。
  示例,2:
  
  输入:n =5
  输出:“0102030405”;
  *大敌;
  *大敌;
  */class  ZeroEvenOdd  {
  private 才能volatile  int  flag =, 0;
  
  private 才能;volatile  int  n;
  ,,
  private 才能;AtomicInteger 我;//才能构造函数
  public 才能ZeroEvenOdd (int  n), {
  this.n 才能=,n;
  时间=this.i 才能;new  AtomicInteger (1);
  ,,},,,,,,
  ,,//仅才能打印出,0
  public 才能;void 零(Runnable  printNumber), {
  ,,(int  k =, 0;, k  & lt;, n;, k + +), {
  synchronized (这个),{
  try  {
  在(0,!=,this.flag), {
  this.wait ();
  }
  
  printNumber.run ();
  
  时间=flag  1;
  },
  catch  (InterruptedException  e), {
  e.printStackTrace ();
  }
  finally  {
  this.notifyAll ();
  }
  }
  ,}
  ,,},
  ,,//仅才能打印出,偶数
  public 才能;void 甚至(Consumerleetcode中怎么利用多线程打印零与奇偶数