Java代码中如何使用多线程交替打印1到10呢?
下文笔者讲述采用多线程模式交替输出1到10的所有数字,具体的实现方式如下所示
实现思路: 使用lock.notify()和lock.wait() 即可停止和唤醒线程 实现交替输出字符的效果例:使用多线程交替输出数字
class NumberRunnableImpl implements Runnable { private int number = 1; private Object lock = new Object(); @Override public void run() { while (true) { synchronized (lock) { // 调用notify()唤醒阻塞的线程 lock.notify(); if (number <= 10) { String threadName = Thread.currentThread().getName(); System.out.println(threadName + "打印数字" + number); number++; try { // 调用wait()进入阻塞状态并且释放锁 lock.wait(); // 线程唤醒后继续执行以下代码 threadName = Thread.currentThread().getName(); System.out.println(threadName + "完成本次打印"); } catch (InterruptedException e) { e.printStackTrace(); } } else { break; } } } } } package com.java265; public class Test { public static void main(String[] args) { NumberRunnableImpl numberRunnableImpl = new NumberRunnableImpl(); Thread thread1 = new Thread(numberRunnableImpl); thread1.setName("线程1"); Thread thread2 = new Thread(numberRunnableImpl); thread2.setName("线程2"); thread1.start(); thread2.start(); } }
以上代码原理分析
1、调用wait()进入阻塞状态并且释放锁 2、调用notify()唤醒阻塞的线程 3、线程1打印数字后执行lock.wait()方法线程1进入阻塞状态并释放锁; 线程2进入run方法后调用notify()唤醒阻塞的线程1,线程1继续执行直至完成; 当线程2打印数字后执行lock.wait()方法线程2进入阻塞状态并释放锁...依次类推
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。