`

多线程交替打印

阅读更多
public class NThread implements Runnable {
	static Object o=new Object();
	volatile static int index=0;
	static int n=10;  //线程数量
	int max=100;   //打印次数
	int i;        //线程名
	public NThread(int i) {
		this.i=i;
	}
	public static void main(String[] args) {
		for(int j=0;j<n;j++) {
			(new Thread(new NThread(j))).start();
		}

	}

	public void run() {
		while(true) {
			synchronized (o) { //不加这个会卡死报异常
				if(index>=max) {
					o.notify();//加上这个可以结束
					break;
				}
				if(index%n!=i) {
					try {
						o.wait();
					} catch (InterruptedException e) {					
						e.printStackTrace();
					}
				}else {
					System.out.println(i+"-->"+index);
					index++;
					o.notifyAll();//只能用notifyAll,用notify会只执行一次卡死
					try {
						o.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}
		
	}

}

 

0-->0
1-->1
2-->2
3-->3
4-->4
5-->5
6-->6
7-->7
8-->8
9-->9
0-->10


0-->90
1-->91
2-->92
3-->93
4-->94
5-->95
6-->96
7-->97
8-->98
9-->99

 

分享到:
评论

相关推荐

    juc多线程交替打印ABC、熟悉lock的唤醒机制

    现场交替访问、等待和唤醒

    多线程 打印1-99,100-199

    ### 实验知识点解析 #### 一、ThreadMock 类的设计与实现 ...通过以上的分析和实现,我们可以清楚地理解如何利用 Java 的多线程机制以及 `Runnable` 接口来设计和实现一个简单的多线程应用程序。

    java多线程每个线程挨着打印ABC的4种实现方式

    java多线程每个线程挨着打印ABC的4种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...

    Java多线程通信:交替打印ABAB实例

    在这个场景下,我们关注的是如何实现两个线程交替打印"A"和"B",形成"ABABAB"这样的序列。 在给出的示例中,我们创建了一个`PrintAB`类,包含两个方法`printA()`和`printB()`,这两个方法都是`synchronized`的,...

    Java 实现多线程切换等待唤醒交替打印奇偶数

    Java 多线程切换等待唤醒交替打印奇偶数 在 Java 中,多线程编程是非常重要的一个概念,特别是在日常工作生活中,可能会有多个人或是很多人干同一件事。在 Java 编程中,同样也会出现类似的情况,多个线程干同样一...

    java实现两个线程交替打印的实例代码

    Java 实现两个线程交替打印的实例代码 在 Java 编程语言中,线程同步是非常重要的一部分,特别是在多线程编程中。今天,我们要讨论的是如何使用 Java 实现两个线程交替打印的实例代码。 在本篇文章中,我们将使用...

    js代码-实现类似与java的多线程打印 实现交替打印1a2b3c4

    - 为了模拟多线程交替打印,我们可以使用Promise或者async/await来创建异步任务,然后通过回调函数或者await关键字来控制执行顺序。 3. Promise实现 - 我们可以创建两个或多个Promise,分别代表不同的“线程”。...

    实现Runnable接口创建多线程.docx

    运行`Example02`类,我们将看到类似图10-2所示的结果,其中`蜘蛛侠`和`钢铁侠`线程以及主线程`main`交替打印数字。这是因为线程的执行顺序是不确定的,取决于操作系统的调度,这正是多线程并发执行的特点。 总结...

    两个线程交替执行

    多线程编程与线程同步 多线程编程是指在一个程序中同时执行多个线程,以提高程序的效率和响应速度。在 Java 中,线程可以通过 Thread 类或 Runnable 接口来创建。然而,在多线程编程中,线程之间的同步是一个非常...

    两线程交替运行demo

    在IT领域,多线程编程是一项重要的技术,特别是在并发处理和优化程序性能方面。本示例"两线程交替运行demo"是针对C++语言的一个实践项目,它演示了如何在Visual Studio 2010环境下创建并管理两个线程,使得这两个...

    java多线程实现轮流打印ABC

    使用多线程和阻塞队列实现了ABC字母按顺序轮流打印

    简单的多线程程序

    在"more_line_0722"这个文件中,很可能包含了实现多线程打印输出文字的代码示例。这种场景下,多线程可以提高输出效率,避免单线程串行打印导致的等待时间。线程间的同步可能通过互斥量(mutex)、事件(event)、...

    semaphore控制多线程循序执行

    在多线程编程中,同步和互斥是两个至关重要的概念,它们确保了多个线程在访问共享资源时不会产生冲突。Semaphore(信号量)是一种经典的同步机制,它源自于荷兰计算机科学家Edsger W. Dijkstra提出的银行家算法。本...

    Java实现多线程轮流打印1-100的数字操作

    对于两个线程交替打印1-100的奇偶数,代码中使用了一个`volatile`关键字修饰的`flag`变量。`volatile`关键字确保了多个线程之间对共享变量的可见性,即一旦一个线程修改了`flag`的值,其他线程可以立即看到这个改变...

    简单的多线程的实现

    运行这个程序,你会看到两个线程交替打印消息,每个线程有自己的线程ID,表明它们正在并发执行。 然而,多线程编程也带来了挑战,如数据竞争、死锁和资源管理等问题。在实际开发中,你需要使用互斥量(mutex)、...

    golang 两个go程轮流打印一个切片的实现

    两个 go 程轮流打印一个切片。 Golang 实现: 使用两个 channel,只用来判断 package main import ( fmt sync ) // 两个 go 程轮流打印一个切片 func main() { ch1 := make(chan bool, 1) ch2 := make(chan ...

    (多线程)leetcode1195. 交替打印字符串 最简单解法一个变量搞定

    编写一个可以从 1 到 n 输出代表这个数字的字符串的程序,但是: 如果这个数字可以被 3 整除,输出 “fizz”。 如果这个数字可以被 5 整除,输出 “buzz”。 如果这个数字可以同时被 3 和 5 整除,输出 “fizzbuzz...

    关于C# 多线程学习

    关于C#多线程学习,本篇将深入探讨在C#中如何管理和操作线程,包括启动、停止、暂停线程、调整线程优先级等关键知识点。 ### 启动线程 在C#中,启动一个新线程通常通过`Thread`类实现。创建一个新的线程对象时,...

    (多线程)leetcode1115. 交替打印FooBar 记得Thread.yield();

    在编程领域,多线程是并发执行任务的一种方式,它允许多个代码片段在同一时间运行。在LeetCode的第1115题中,我们面临一个挑战:在两个不同的线程中交替打印"foo"和"bar",使得"foobar"被输出n次。这个题目考察的是...

Global site tag (gtag.js) - Google Analytics