21xrx.com
2024-12-23 01:23:14 Monday
登录
文章检索 我的文章 写文章
Java多线程交替打印奇偶数的代码实现步骤
2023-07-05 11:15:36 深夜i     --     --
Java 多线程 交替打印 奇偶数 实现步骤

在Java编程中,多线程交替打印奇偶数是常见的问题。这种问题涉及到多线程协作,需要考虑线程之间的同步和互斥。

下面是Java多线程交替打印奇偶数的代码实现步骤:

1. 创建两个线程,一个线程用于打印奇数,另一个线程用于打印偶数。

2. 在线程中使用循环进行打印,需要考虑打印的起始值和终止值。例如,对于奇数线程,起始值可以是1,终止值可以是100。对于偶数线程,起始值可以是2,终止值可以是101。

3. 在循环中使用synchronized关键字进行同步。例如,在奇数线程中,先使用synchronized (this)锁住当前对象,在打印完成后再使用wait()方法让线程休眠。等待偶数线程打印完成后,使用notify()方法唤醒奇数线程。

4. 在偶数线程中,使用synchronized (this)锁住当前对象,在打印完成后使用notify()方法唤醒奇数线程,然后使用wait()方法让线程休眠,等待奇数线程打印完成后继续执行。

下面是Java多线程交替打印奇偶数的示例代码:


public class PrintThread extends Thread {

  private int startNum;

  private int endNum;

  private boolean isOdd;

  private Object lock;

  public PrintThread(int startNum, int endNum, boolean isOdd, Object lock)

    this.startNum = startNum;

    this.endNum = endNum;

    this.isOdd = isOdd;

    this.lock = lock;

  

  @Override

  public void run() {

    synchronized (lock) {

      for (int i = startNum; i <= endNum; i += 2) {

        if (!isOdd) {

          i++;

        }

        System.out.println(i);

        lock.notify();

        try {

          if (i < endNum) {

            lock.wait();

          }

        } catch (InterruptedException e) {

          e.printStackTrace();

        }

      }

    }

  }

  public static void main(String[] args) {

    Object lock = new Object();

    PrintThread oddThread = new PrintThread(1, 100, true, lock);

    PrintThread evenThread = new PrintThread(2, 101, false, lock);

    oddThread.start();

    evenThread.start();

  }

}

在这个示例代码中,我们创建了两个PrintThread对象,用于打印奇偶数。通过传递startNum、endNum、isOdd和lock参数,我们可以设定线程打印的起始值和终止值,以及线程是否打印奇数。在run()方法中,我们使用synchronized (lock)锁住当前对象,然后使用循环逐个打印数值。在打印完成后,使用notify()方法唤醒另一个线程,然后使用wait()方法让当前线程休眠,等待另一个线程打印完成后继续执行。

总的来说,Java多线程交替打印奇偶数是一种较为常见的问题,需要考虑多线程同步和互斥等问题。通过使用synchronized关键字进行同步,我们可以实现多线程交替打印奇偶数的功能。

  
  

评论区

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