java多线程实现轮流输出数字和字母
本案例演示3个线程轮流打印输出数字字母;代码如下
package thread;public class ThreadTest { public static void main(String[] args) { Print print = new Print(); new Thread(()->{ print.printNum(); }).start(); new Thread(()->{ print.printZimu(); }).start(); new Thread(()->{ print.printZimuLittle(); }).start(); }}
package thread;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class Print { final Lock lock = new ReentrantLock(); final Condition num = lock.newCondition(); final Condition zimu = lock.newCondition(); final Condition zimuLittle = lock.newCondition(); public void printNum(){ lock.lock(); try { for (int i=1;i<53;i++){ System.out.print(i); if (i%2==0){ zimu.signal(); num.await(); } } } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public void printZimu(){ lock.lock(); try { for (int i=0;i<26;i++){ System.out.print((char)(i+'A')); zimuLittle.signal(); zimu.await(); } } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public void printZimuLittle(){ lock.lock(); try { for (int i=0;i<26;i++){ System.out.print((char)(i+'a')); num.signal(); zimuLittle.await(); } } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } }}
最终输出结果为12aA34bB56cC78dD910eE1112fF1314gG1516hH1718iI1920jJ2122kK2324lL2526mM2728nN2930oO3132pP3334qQ3536rR3738sS3940tT4142uU4344vV4546wW4748xX4950yY5152zZ
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。