Java线程通信:三个线程交替打印1-100

tech2025-07-10  5

目录

问题描述思路代码输出

问题描述

Java创建三个线程,交替打印1-100。

思路

这个问题和之前写的那篇Java多线程:三个线程循环顺序打印ABC其实是一样的。

代码

class PrintNumber { private volatile int number = 1; private volatile int value = 1; void firstPrint() { synchronized (this) { while(value != 1) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName() + ": " + number); number++; value = 2; notifyAll(); } } void secondPrint() { synchronized (this) { while (value != 2) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName() + ": " + number); number++; value = 3; notifyAll(); } } void thirdPrint() { synchronized (this) { while (value!=3) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName() + ": " + number); number++; value = 1; notifyAll(); } } } public class Main { public static void main(String[] args) { PrintNumber printNumber = new PrintNumber(); new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 34; i++) { printNumber.firstPrint(); } } },"线程一").start(); new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 33; i++) { printNumber.secondPrint(); } } },"线程二").start(); new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 33; i++) { printNumber.thirdPrint(); } } },"线程三").start(); } }

输出

线程一: 1 线程二: 2 线程三: 3 线程一: 4 ...... 线程一: 97 线程二: 98 线程三: 99 线程一: 100
最新回复(0)