• 那是从何处传来的钟声呢?偶尔听到那钟声,平添一份喜悦与向往之情。

java线程输出线程开始:1-2-a## 3-4-b## 5-6-c## 7-8-d## 9-0-e## 线程结束

后端 Nanait 12年前 (2012-08-07) 974次浏览 已收录 0个评论 扫描二维码

题目

借助同步机制、sleep()方法、join()方法,实现动画显示:

甲线程输出:1、3、5、7、9

乙线程输出:2、4、6、8、0

丙线程数出:a、b、c、d、e

main 线程输出:线程开始、线程结束

最终输出结果为(注:这是唯一可能的结果)

线程开始:1-2-a## 3-4-b## 5-6-c## 7-8-d## 9-0-e## 线程结束

要求:每隔一秒输出一个字符。(借助 sleep)

分析

可以参考Java 线程生产者和消费者实例

代码如下

  1. package com.liuyanzhao;
  2. /*
  3.  *
  4.  * @author WellsLiu
  5.  *
  6.  */
  7. class Resource {
  8.     int flag=1;
  9. }
  10. class Thread1 extends Thread {
  11.     Resource res;
  12.     public Thread1(Resource res) {
  13.         this.res = res;
  14.     }
  15.     int i=0;
  16.     char []c1 = {‘1‘,’3‘,’5‘,’7‘,’9‘};
  17.     public  void run() {
  18.         synchronized (res) {
  19.             while(i<5) {
  20.                 while(res.flag!=1) {
  21.                     try {
  22.                         res.wait();//t1
  23.                     } catch (InterruptedException e) {
  24.                         e.printStackTrace();
  25.                     }
  26.                 }
  27.                 System.out.print(c1[i]);
  28.                 try {
  29.                     sleep(1000);
  30.                 } catch (InterruptedException e) {
  31.                     e.printStackTrace();
  32.                 }
  33.                 System.out.print(“-“);
  34.                 try {
  35.                     sleep(1000);
  36.                 } catch (InterruptedException e) {
  37.                     e.printStackTrace();
  38.                 }
  39.                 i++;
  40.                 res.notifyAll();
  41.                 res.flag=2;
  42.             }
  43.         }
  44.     }
  45. }
  46. class Thread2 extends Thread {
  47.     Resource res;
  48.     public Thread2(Resource res) {
  49.         this.res = res;
  50.     }
  51.     int i=0;
  52.     char []c1 = {‘2‘,’4‘,’6‘,’8‘,’0‘};
  53.     public  void run() {
  54.         synchronized (res) {
  55.             while(i<5) {
  56.                 while(res.flag!=2) {
  57.                     try {
  58.                         res.wait();
  59.                     } catch (InterruptedException e) {
  60.                         e.printStackTrace();
  61.                     }
  62.                 }
  63.                 System.out.print(c1[i]);
  64.                 try {
  65.                     sleep(1000);
  66.                 } catch (InterruptedException e) {
  67.                     e.printStackTrace();
  68.                 }
  69.                 System.out.print(“-“);
  70.                 try {
  71.                     sleep(1000);
  72.                 } catch (InterruptedException e) {
  73.                     // TODO Auto-generated catch block
  74.                     e.printStackTrace();
  75.                 }
  76.                 i++;
  77.                 res.notifyAll();
  78.                 res.flag=3;
  79.             }
  80.         }
  81.     }
  82. }
  83. class Thread3 extends Thread {
  84.     Resource res;
  85.     public Thread3(Resource res) {
  86.         this.res = res;
  87.     }
  88.     int i=0;
  89.     char []c1 = {‘a’,’b’,’c’,’d’,’e’};
  90.     public  void run() {
  91.         synchronized (res) {
  92.             while(i<5) {
  93.                 while(res.flag!=3) {
  94.                     try {
  95.                         res.wait();
  96.                     } catch (InterruptedException e) {
  97.                         e.printStackTrace();
  98.                     }
  99.                 }
  100.                 System.out.print(c1[i]);
  101.                 try {
  102.                     sleep(1000);
  103.                 } catch (InterruptedException e) {
  104.                     e.printStackTrace();
  105.                 }
  106.                 System.out.print(“#”);
  107.                 try {
  108.                     sleep(1000);
  109.                 } catch (InterruptedException e) {
  110.                     e.printStackTrace();
  111.                 }
  112.                 System.out.print(“#”);
  113.                 try {
  114.                     sleep(1000);
  115.                 } catch (InterruptedException e) {
  116.                     e.printStackTrace();
  117.                 }
  118.                 System.out.print(” “);
  119.                 i++;
  120.                 res.notifyAll();
  121.                 res.flag=1;
  122.             }
  123.         }
  124.     }
  125. }
  126. public class Test1 {
  127.     public static void main(String[] args) throws InterruptedException {
  128.         System.out.printf(“线程开始: “);
  129.         Resource res = new Resource();
  130.         Thread1 t1 = new Thread1(res);
  131.         Thread2 t2 = new Thread2(res);
  132.         Thread3 t3 = new Thread3(res);
  133.         t1.start();
  134.         t2.start();
  135.         t3.start();
  136.         t1.join();
  137.         t3.join();
  138.         t2.join();
  139.         System.out.print(“线程结束”);
  140.     }
  141. }

运行结果如下

java 线程输出线程开始:1-2-a## 3-4-b## 5-6-c## 7-8-d## 9-0-e## 线程结束

 


何处钟 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:java 线程输出线程开始:1-2-a## 3-4-b## 5-6-c## 7-8-d## 9-0-e## 线程结束
喜欢 (0)
[15211539367@163.com]
分享 (0)

您必须 登录 才能发表评论!