如何使用java代码实现一个奇数和偶数交替打印呢?

书欣 Java每日一问 发布时间:2022-09-19 23:12:59 阅读数:12198 1 多线程
下文笔者讲述使用java交替打印输出奇数和偶数的方法分享,如下所示
实现思路:
    当打印一个数字后,则wait掉此线程
	等打印其它线程运行
例:
private int count = 0;
private final Object lock = new Object();

@Test
public void testMethod() throws InterruptedException {

	Thread even = new Thread(() -> {
		System.out.println("偶数开始: " + "******");
		while (count <= 100) {
			synchronized (lock) {
				System.out.println("偶数: " + count++);
				lock.notifyAll();
				System.out.println("偶数判断: " + "******");
				try {
					// 如果还没有结束,则让出当前的锁并休眠
					if (count <= 100) {
						System.out.println("偶数: " + "开始等待******");
						lock.wait();
						System.out.println("偶数: " + "等待结束******");
					}
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
		System.out.println("偶数: " + "end");
	});

	Thread odd = new Thread(() -> {
		System.out.println("奇数开始: " + "******");
		while (count <= 100) {
			synchronized (lock) {
				System.out.println("奇数: " + count++);
				lock.notifyAll();
				System.out.println("奇数判断: " + "******");
				try {
					// 如果还没有结束,则让出当前的锁并休眠
					if (count <= 100) {
						System.out.println("奇数: " + "开始等待******");
						lock.wait();
						System.out.println("奇数: " + "等待结束******");
					}
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
		System.out.println("奇数: " + "end");
	});

	System.out.println("多线程开始: " + "启动even线程");
	even.start();
	// 确保偶数线程线先获取到锁
	System.out.println("多线程: " + "sleep 1秒");
	Thread.sleep(1);

	System.out.println("多线程开始: " + "启动odd线程");
	odd.start();
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaProblem/202209/4467.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者