第十六周作业

题目1:编写一个应用程序,利用Java多线程机制,实现时间的同步输出显示。

源代码:

Testmain.java文件

1 package CurrentTime;
2 
3 public class Testmain {
4     public static void main(String[] args) {
5          ThreadMethod tm=new ThreadMethod(); //创建ThreadMethod对象,继承父类Thread
6          tm.start();
7     }
8 }

ThreadMethod.java文件

 1 package CurrentTime;
 2 
 3 import java.util.Date;
 4 
 5 public class ThreadMethod extends Thread {
 6     public void run() {    //重写run()方法
 7         Date date=null;
 8         while(true){
 9             date=new Date();   //创建时间Date类对象
10             System.out.println(date);   //输出显示当前系统时间
11             try {
12                 Thread.sleep(1000); //正在运行的线程休眠1秒钟
13             } catch (InterruptedException e) {
14                 // TODO Auto-generated catch block
15                 e.printStackTrace();
16             }
17         }     
18     }
19 }

运行截图:

第十六周作业_第1张图片

题目2:编写一个应用程序,利用Java多线程机制,实现猜数字游戏(随机数范围0~100之间的整数)。

源代码:

Test,java文件

1 package DigitalGame;
2 import DigitalGame.Threadmethod;
3 public class Test {
4     public static void main(String[] args) {
5         Threadmethod tm=new Threadmethod();  //创建使用Runnable接口Threadmethod类的对象
6         tm.thread1.start();  //让thread1线程进入等待序列
7         tm.thread2.start();   //让thread2线程进入等待序列
8     }
9 }

Threadmehod.java文件

 1 public class Threadmethod implements Runnable
 2 {
 3     Thread thread1,thread2;   //声明两个线程类对象
 4     int inputnum,rand,count;
 5     boolean bool1=false,bool2=false;
 6     public Threadmethod()     //构造方法
 7     {
 8         thread1=new Thread(this);
 9         thread2=new Thread(this);
10     }
11     public void run()  //重写run方法
12     {
13         while(true){
14             compare();  //执行同步方法compare()
15             if(count==3)
16                 return;
17         }
18     }
19     public synchronized void compare()  //同步方法compare()
20     {
21         if(Thread.currentThread()==thread1&&bool2==false){
22             rand=(int)(Math.random()*100)+1;   //随机生成1~100之内的数
23             System.out.println("$$$猜数字游戏开始啦$$$");
24             bool1=true;
25             bool2=true;    
26         }
27         if(Thread.currentThread()==thread1){
28             if(bool1==true)
29             {
30                 try {
31                     wait(); //中断线程thread1
32                 } catch (InterruptedException e) {
33                     // TODO Auto-generated catch block
34                     e.printStackTrace();
35                 }
36             }
37             if(inputnum//作比较
38                 System.out.println("抱歉,您猜小了!");
39                 count=1;
40             }
41             else if(inputnum>rand){
42                 System.out.println("抱歉,您猜大了!");
43                 count=2;
44             }
45             else if(inputnum==rand){
46                 System.out.println("恭喜,您猜对了!");
47                 count=3;
48             }
49             bool1=true;
50             notifyAll();  //恢复因执行wait()方法中断的线程Thread1
51         }
52         if(Thread.currentThread()==thread2)
53         {
54               while(bool1==false)
55               {
56                    try {
57                         wait();  //中断线程thread2
58                     } catch (InterruptedException e) {}
59               }  
60               if(count<3)
61               {
62                   System.out.println("****************");
63                   System.out.println("请输入您猜测的数:(范围1~100)");
64                   Scanner reader=new Scanner(System.in);
65                   inputnum=reader.nextInt();   
66               }
67               bool1=false;
68         }
69         notifyAll();  
70     }
71 }

运行截图:

第十六周作业_第2张图片

你可能感兴趣的:(第十六周作业)