两个线程交替打印1-100之间的数字

文章目录

目录

一、问题

二、解决方案

三、用到的方法

四、代码实现

五、结果示例 


一、问题

两个线程交替打印1-100之间的数字

二、解决方案

  • 重写run()方法,将输出1到100之间整数的代码写到同步方法里。
  • 线程1进入到同步方法,输出一个整数后,阻塞并释放锁。
  • 线程2进入到同步方法,唤醒线程1,输出整数后,阻塞并释放锁。
  • 线程1和线程2重复第3步,直到输出所有的整数。

三、用到的方法

  • wait():一旦执行此方法,当前线程就进入到阻塞状态,并释放同步监视器。
  • notify():一旦执行此方法,就会唤醒被wait的一个线程,如果有多个线程被wait,就唤醒优先级高的那个。
  • notifyAll():一旦执行此方法,就会唤醒所有被wait的线程。

四、代码实现

public class PrintNumThread extends Thread {

    static int num = 0;
    static Object object = new Object();

    @Override
    public void run() {

        while (true) {

            synchronized (object) {
                //唤醒等待的线程 必须在同步代码块中
                object.notify();
                if (num < 100) {
                    num++;
                    System.out.println(Thread.currentThread().getName()+":"+num);
                } else {
                    break;
                }
                try {
                    /*
                    wait()  必须在同步代码块中使用,
                            必须是使用同步锁调用wait()
                            wait()调用后,锁会释放
                            必须要通过其他线程来唤醒
                     */
                    object.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {

        PrintNumThread p1 = new PrintNumThread();
        PrintNumThread p2 = new PrintNumThread();
                       p1.start();
                       p2.start();
    }
}

五、结果示例 

两个线程交替打印1-100之间的数字_第1张图片

 

你可能感兴趣的:(JavaSE,java)