java多线程交替打印数字和字母
来源:互联网 发布:软件过程 编辑:程序博客网 时间:2024/05/21 17:16
题目:
1.开启两个线程,一个线程打印A~Z,另一个线程打印1~52的数据。
2.实现交替打印,输出结果为12A34B………..5152Z.
3.请用多线程方式实现。
使用阻塞队列实现
class NumberPrinter extends Thread{ private BlockingQueue<String> bp; public NumberPrinter(BlockingQueue<String> bp) { super(); this.bp = bp; } @Override public void run() { super.run(); for(int i=1;i<53;i++){ try { System.out.print(i); bp.put((i)+""+(i+1)); Thread.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } } }}class LetterPrinter extends Thread{ private BlockingQueue<String> bp; public LetterPrinter(BlockingQueue<String> bp) { super(); this.bp = bp; } @Override public void run() { super.run(); char ch ='A'; for (int i = 0; i < 26; i++) { try { bp.take(); bp.take(); System.out.print((char) (ch + i)); Thread.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } } }}public class T16{ private final Lock lock = new ReentrantLock(); private final Condition con = lock.newCondition(); public static void main(String[] args){ BlockingQueue<String> bp = new ArrayBlockingQueue<>(2); LetterPrinter t1= new LetterPrinter(bp); NumberPrinter t2 = new NumberPrinter(bp); t1.start(); t2.start(); }}
使用原子变量
public class T16_2 { public static AtomicInteger countAtomicInteger=new AtomicInteger(0); /** * @param args */ public static void main(String[] args) { // 打印字母 Thread t1 = new Thread(){ @Override public void run() { int i=0; char ch = 'A'; while(true){ if(i>=26){return;} if(countAtomicInteger.get()==2 && i<26){ System.out.print((char)(ch+i)); countAtomicInteger.set(0); i++; } } } }; // 打印数字 Thread t2 = new Thread(){ @Override public void run() { int i=1; while(true){ if(i>52)return; if(countAtomicInteger.get()<2 && i<=52){ countAtomicInteger.incrementAndGet(); System.out.print(i); i++; } } } }; t1.start(); t2.start(); }}
使用Condition
public class T16_3 { static boolean letterFlag=true; static boolean numFlag=true; static Lock lock = new ReentrantLock(); static Condition letterCondition = lock.newCondition(); static Condition numCondition = lock.newCondition(); static boolean flag=true; /** * @param args */ public static void main(String[] args) { new Thread(new Runnable(){ @Override public void run() { char ch = 'A'; int i=0; while(i<26){ lock.lock(); try{ if(flag){ letterCondition.await(); } System.out.print((char)(ch+i)); i++; flag=true; numCondition.signal(); }catch(Exception e){ e.printStackTrace(); }finally{ lock.unlock(); } } } }).start(); //打印数字的线程 new Thread(new Runnable(){ @Override public void run() { int i=1; while(i<53){ lock.lock(); try{ if(!flag){ numCondition.await(); } System.out.print(i+""+(i+1)); i+=2; flag=false; letterCondition.signal(); }catch(Exception e){ e.printStackTrace(); }finally{ lock.unlock(); } } } }).start(); }}
阅读全文
0 0
- java多线程交替打印数字和字母
- 多线程交替打印数字
- 多线程交替打印数字
- Java多线程交替打印奇数和偶数
- java多线程连续打印字母数字问题
- 两个线程交替打印字母 java
- 多线程同步之事件 -- 2个线程交替打印数字
- Java多线程打印数字
- 两线程交替打印数字
- Java 多线程 子线程 交替打印 奇偶数
- 一起做面试题--Java多线程交替打印
- java多线程交替打印0-100的奇偶数
- 多线程和akka实现两个数组交替打印
- 多线程技术: 两个线程交替打印奇数和偶数
- Java线程问题实现打印数字字母
- 多线程交替打印A,B
- java多线程顺序打印ABCD四个字母
- java替换数字和字母
- 学习典范
- 【TensorFlow】Windows+Anaconda3+Tensorflow(CPU&GPU)+Pycharm 安装
- Java
- N0 解决用Youtube录制视频后 直接播放会报错问题
- Hiho 1032 最长回文子串
- java多线程交替打印数字和字母
- 会声会影淘宝视频制作竖屏(正方形)视频设置教程
- 剑指Offer 替换空格
- Error: C9555E: License checkout for feature LIC0=KA...-.....-..... with version 5.0201503 has been
- 洛谷P1941 飞扬的小鸟 DP
- linux+java+ffmpeg 实现音视频转码技术
- Springside中使用MyBatis进行分页
- oracle分区表
- fragment中嵌套viewpager,vierpager中有多个fragment,不显示 ...