军训时最常见的莫过于报数了,1、2、3、4、5.....
现在我要用Java的多线程实现类似军训报数的功能,
即开启两个线程,让它们轮流数数,从1数到10,如:
线程A:1
线程B:2
线程A:3
线程B:4
线程A:5
线程B:6
......
如何实现该功能呢?
--------------------------------------------------------------------------------------------------------------------------------
我的思路:
如下图所示,我们可以创建两个线程,这两个线程同时调用某个类中的数数方法即可。
为了维护方便,我们可以将数数方法封装在某个类中,具体如后面的代码所示。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
我实现以上功能的程序代码如下:
- import mythread.MyThread;
- public class main {
- /**
- * @param args
- */
- public static void main(String[] args) {
- //创建两个线程进行数数
- MyThread threadA=new MyThread();
- MyThread threadB=new MyThread();
- threadA.start();
- threadB.start();
- }
- }
- package mythread;
- import java.lang.Thread;
- //线程类
- public class MyThread extends Thread{
- //注意bs对象必须声明成static
- //这样在创建两个线程时,它们的bs对象才是同一个对象
- static Business bs=new Business();
- public void run()
- {
- while(bs.getN()<=10)
- {
- try {
- bs.ShuShu();//开始数数
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
- //业务类
- class Business{
- int n=1;
- //数数
- public synchronized void ShuShu()
- {
- try {
- System.out.println("线程:"+Thread.currentThread().getName()+"说:"+n);
- n++;
- this.notify();//唤醒处于等待状态的线程
- this.wait(); //进入等待状态
- }
- catch (Exception e) {e.printStackTrace();}
- }
- public int getN()
- {
- return n;
- }
- }
--------------------------------------------------------------------------------------------------------------------------------------------------
效果截图: