zoukankan      html  css  js  c++  java
  • 写两个线程,一个线程打印1-52,另一个线程打印A-Z,打印顺序为12A34B56C......5152Z

    题目:

    写两个线程,一个线程打印1-52,另一个线程打印A-Z,打印顺序为12A34B56C......5152Z。要求用线程间的通信。

    
    
     1 /**
     2  * 写两个线程,第一个线程打印1-52,第二个线程打印A-Z,打印结果为12A34B...5152Z
     3  */
     4 public class ThreadPrinter {
     5     // true打印数字,false打印字母
     6     private boolean flag = true;
     7 
     8     // 打印字母
     9     public synchronized void printNumber(String s) {
    10         try {
    11             if (!flag) {
    12                 super.wait();
    13             }
    14             System.out.print(s);
    15             flag = false;
    16             super.notifyAll();
    17         } catch (InterruptedException ex) {
    18         }
    19     }
    20 
    21     // 打印数字
    22     public synchronized void printLetter(String s) {
    23         try {
    24             if (flag) {
    25                 super.wait();
    26             }
    27             System.out.print(s);
    28             flag = true;
    29             super.notifyAll();
    30         } catch (InterruptedException ex) {
    31         }
    32     }
    33 
    34     /**
    35      *线程2:打印A-Z
    36      */
    37     public static class LetterPrintThread extends Thread {
    38         private ThreadPrinter printer;
    39 
    40         private LetterPrintThread(String name, ThreadPrinter printer) {
    41             super(name);
    42             this.printer = printer;
    43         }
    44 
    45         @Override
    46         public void run() {
    47             for (int i = 1; i <= 26; i++) {
    48                 int temp = i + 64;
    49                 char c = (char) temp;
    50                 printer.printLetter(c + " ");
    51             }
    52         }
    53 
    54     }
    55 
    56     /**线程1:打印1-52*/
    57     public static class NumberPrintThread extends Thread {
    58         private ThreadPrinter printer;
    59 
    60         private NumberPrintThread(String name, ThreadPrinter printer) {
    61             super(name);
    62             this.printer = printer;
    63         }
    64         @Override
    65         public void run() {
    66             for (int i = 1; i <= 26; i++) {
    67                 String s = (2 * i - 1) + " " + 2 * i + " ";
    68                 printer.printNumber(s);
    69             }
    70 
    71         }
    72     }
    73 
    74     public static void main(String[] args) {
    75         ThreadPrinter printer = new ThreadPrinter();
    76         new NumberPrintThread("打印数字线程", printer).start();
    77         new LetterPrintThread("打印字母线程", printer).start();
    78     }
    79 }
     
  • 相关阅读:
    Rocket
    Rocket
    Rocket
    Rocket
    POJ 1849 树的直径 Two
    SGU 495 Kids and Prizes
    HDU 4336 概率DP 状压
    HDU 4089 && UVa 1498 Activation 带环的概率DP
    SGU 149 树形DP Computer Network
    暑假集训刷题记录
  • 原文地址:https://www.cnblogs.com/cdlyy/p/12061029.html
Copyright © 2011-2022 走看看