前两天转了马士兵老师的《没错,我就是厕所所长!》,正好有朋友和我讨论一个线程打印的问题,于是今天就趁着周末们睡觉,写了个简单的实现。
题干,是这样的,通过2个线程,交替输出 A1B2C3....Z26
先贴出我的实现,欢迎大家和我讨论
public class TwoThread2 { public static class Printer{ public synchronized void print(String i) { try { this.notify(); System.out.println(Thread.currentThread().getName() + " " + i); this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } //两个线程交替输出, A1B2C3.....Z26 public static final int SETPS = 26; public static class ThreadNum extends Thread { private int startCharCount = 1; private Printer p = new Printer(); public Printer getP() { return p; } public void setP(Printer p) { this.p = p; } @Override public void run() { for (int i = 0; i < SETPS; i++) { p.print(startCharCount+++""); } } } public static class ThreadStr extends Thread { private int startCharCount = 65; private Printer p = new Printer(); public Printer getP() { return p; } public void setP(Printer p) { this.p = p; } @Override public void run() { for (int i = 0; i < SETPS; i++) { p.print( (char) startCharCount+++""); } } } public static void main(String[] args) { Printer p = new Printer(); ThreadNum tn = new ThreadNum(); tn.setName("Thread num :"); tn.setP(p); ThreadStr ts = new ThreadStr(); ts.setName("Thread str :"); ts.setP(p); ts.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } tn.start(); } }
大概实现就是这样的,这个流程有点想系鞋带,用一个线程专门打印字符串,一个线程打印数字,然后线程交替加锁,释放,流程大概如下所示。
如果文章对您有那么一点点帮助,我将倍感荣幸,
本文分享自微信公众号 - 麒思妙想(qicai1612),作者:dafei1288
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2020-08-03
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句