介绍
这期内容当中小编将会给大家带来有关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中怎么利用多线程打印零与奇偶数