21xrx.com
2024-12-27 05:43:05 Friday
登录
文章检索 我的文章 写文章
如何在Java多线程中实现轮流打印数字?
2023-06-29 18:18:17 深夜i     --     --
Java 多线程 轮流打印 数字 实现

在Java多线程编程中,实现轮流打印数字是一个非常基础的例子。这个例子可以使得初学者更好地理解线程的运行机制,以及如何在多个线程之间进行数据交互。

首先,我们需要创建两个线程,一个线程用来打印奇数,一个线程用来打印偶数。在每个线程中,我们需要设置一个变量来保存下一个要打印的数字。在每次打印完成后,我们需要将变量的值加1,这样就可以实现轮流打印数字的效果。

接下来,我们需要设置一个循环,用来控制每个线程的打印次数。在循环中,我们可以使用Java内置的sleep()函数来设置每次打印的时间间隔。这样可以让整个打印过程看起来更加平滑。

最后,我们需要使用Java的synchronized关键字来保证线程的顺序执行。这样可以避免出现多个线程同时打印同一个数字的情况,从而保证每个数字只会被打印一次。

下面是一个简单的Java程序代码实现:


public class PrintNumber {

  private static int nextNum = 1;

  private static int maxNum = 20;

  private static Object lock = new Object();

  public static void main(String[] args) {

    Thread oddThread = new Thread(new PrintOddThread());

    Thread evenThread = new Thread(new PrintEvenThread());

    oddThread.start();

    evenThread.start();

  }

  private static class PrintOddThread implements Runnable {

    @Override

    public void run() {

      while (nextNum <= maxNum) {

        synchronized (lock) {

          if (nextNum % 2 == 1) {

            System.out.println(Thread.currentThread().getName() + ":" + nextNum);

            nextNum++;

          }

        }

        try {

          Thread.sleep(100);

        } catch (InterruptedException e) {

          e.printStackTrace();

        }

      }

    }

  }

  private static class PrintEvenThread implements Runnable {

    @Override

    public void run() {

      while (nextNum <= maxNum) {

        synchronized (lock) {

          if (nextNum % 2 == 0) {

            System.out.println(Thread.currentThread().getName() + ":" + nextNum);

            nextNum++;

          }

        }

        try {

          Thread.sleep(100);

        } catch (InterruptedException e) {

          e.printStackTrace();

        }

      }

    }

  }

}

在上面的程序中,我们创建了一个PrintNumber类来实现轮流打印数字的功能。该程序使用两个线程来打印奇数和偶数,分别是PrintOddThread和PrintEvenThread。

在每个线程的run()方法中,我们使用synchronized关键字来保证线程的顺序执行。在每次打印完成后,我们也调用了Thread.sleep()函数来设置打印的时间间隔,使得整个打印过程看起来更加平滑。

在打印数字之前,我们需要设置一个变量nextNum来保存下一个要打印的数字,以及一个变量maxNum来表示最大的数字。在每个线程中,我们使用while循环来控制打印的次数,直到所有的数字都被打印完成为止。

在程序运行时,我们会看到两个线程交替打印数字的效果,使得整个过程非常有趣和生动。通过这个例子,我们可以更好地理解Java多线程编程的基本原理和实现方法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复