有三个线程A,B,C 循环10次打印出三个线程的名字ABCABCABCABCABCABCABCABCABCABC
package com.lyl.test.thread;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadTest {
private Lock lock = new ReentrantLock();
private Condition conditionA = lock.newCondition();
private Condition conditionB = lock.newCondition();
private Condition conditionC = lock.newCondition();
private String threadPrintName = "A";
class A implements Runnable {
public void run() {
try {
lock.lock();
for (int i = 0; i < 10; i++) {
while (!Thread.currentThread().getName()
.equals(threadPrintName)) {
conditionA.await();
}
System.out.print(Thread.currentThread().getName());
threadPrintName = "B";
conditionB.signal();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
class B implements Runnable {
public void run() {
try {
lock.lock();
for (int i = 0; i < 10; i++) {
while (!Thread.currentThread().getName()
.equals(threadPrintName)) {
conditionB.await();
}
System.out.print(Thread.currentThread().getName());
threadPrintName = "C";
conditionC.signal();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
class C implements Runnable {
public void run() {
try {
lock.lock();
for (int i = 0; i < 10; i++) {
while (!Thread.currentThread().getName()
.equals(threadPrintName)) {
conditionC.await();
}
System.out.print(Thread.currentThread().getName());
threadPrintName = "A";
conditionA.signal();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
public static void main(String[] args) {
ThreadTest tt = new ThreadTest();
Thread t1 = new Thread(tt.new A());
Thread t2 = new Thread(tt.new B());
Thread t3 = new Thread(tt.new C());
t1.setName("A");
t2.setName("B");
t3.setName("C");
t1.start();
t2.start();
t3.start();
}
}
分享到:
相关推荐
java多线程每个线程挨着打印ABC的4种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...
Qt案例之利用QThread类实现简单多线程案例循环打印数字,可参考文章:https://blog.csdn.net/didi_ya/article/details/122661092
在这个"多线程依次循环打印26个英文字母"的问题中,我们主要关注如何在多个线程之间同步操作,确保字母按照顺序正确地输出。这里涉及了`条件队列`和`lock`两个关键概念。 首先,让我们理解一下`多线程`。在单核...
在易语言中,“启动线程”、“循环”和“延时”是三个重要的编程概念,它们在创建实时、响应式的程序中起到关键作用。 首先,我们要理解“启动线程”。在计算机编程中,线程是程序执行的最小单元,每个线程代表了...
在上述示例中,如果将同步对象改为this,那么线程A的死循环会阻止线程B执行,因为此时两个方法同步的是同一个对象,形成了互斥。 总的来说,Java中线程执行死循环会消耗大量的CPU资源,可能导致其他线程无法及时...
启动两个线程,一个线程打印1~52,另一个线程打印A~Z
默认情况下,MFC应用程序会为主线程创建一个消息循环,但当创建新线程时,这个新线程不会自动包含消息循环。因此,为了在线程中处理这些消息,我们需要手动为线程添加自定义的消息循环。 要在线程中创建自定义的...
在计算机科学中,多线程和循环队列是两个重要的概念,它们在高效并发编程中发挥着关键作用。本文将详细探讨多线程环境下的循环队列应用。 首先,我们来理解多线程。多线程是一种编程模型,允许一个程序同时执行多个...
编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C。 如果要求打印 ABCBCACAC,线程对应打印信息到控制台。 弊端:耗费cpu
Java多线程连续打印abc实现方法详解是 Java 编程语言中的一种常见问题,旨在解决三个线程同时执行,要求打印出10个连着的abc的难题。该问题的解决方案需要使用同步机制来确保三个线程的顺序执行。 知识点一:多线程...
使用多线程和阻塞队列实现了ABC字母按顺序轮流打印
在计算机编程中,尤其是Windows API或MFC框架下,线程消息循环是一个核心概念,用于处理线程内的消息。线程消息循环允许线程接收和处理来自其他线程或者系统的消息,这些消息可能是用户交互、系统事件或者其他线程...
创建一个带三个子线程的程序,第一个线程启动10ms后,第二个线程再启动,然后再等待10ms后第三个线程启动,每一个线程从1—1000循环输出线程的名称和计数,当三个线程结束时要输出各自的结束信息,然后主线程结束。
一个线程在结束时修改原子变量,另一个线程则在循环中不断检查该变量,一旦发现状态改变,即可进行后续操作。 在`ThreadAsynTeamwork.cpp`和`ThreadAsynTeamwork.h`文件中,可能包含了一个实现此类异步通知的示例。...
本示例中的“多线程读写问题循环buffer”着重探讨了如何在多个线程之间安全地共享一个循环缓冲区,以实现高效的数据交换。 首先,我们需要理解“循环buffer”的概念。循环缓冲区是一种内存管理策略,它利用数组或...
C#创建线程与循环的例子,此为演示代码,创建新线程,并创建ThreadStart委托对象,消息传输方法AddMsg,在方法中使用循环实现传输功能,在循环中创建线程,在循环中创建并使用线程,传输一行,并将该行删除,点击...
例如,定义一个信号`emit newDataAvailable(data)`,在子线程的循环操作中发出,主线程连接该信号并更新界面。 4. 安全退出子线程 当不再需要子线程时,不要直接调用`thread.quit()`或`thread.terminate()`,这些...
这个实验的核心是创建两个独立的线程,一个用于文章的下载,另一个用于文章的打印,同时利用线程同步机制确保数据的安全与正确性。 首先,让我们了解一下多线程的概念。在计算机编程中,线程是程序执行的基本单元,...
例如,可能需要在一个循环中反复执行某段代码,并在每次循环后使用"延时"命令让线程休眠一段时间。 3. 控制循环的退出:当达到预设条件(如循环次数、外部信号等)时,结束循环并退出线程。 4. 线程结束时,记得使用...
1. 建立三个线程,并且同时运行它们。当运行时输出线程的名称。 实验步骤: (1)、创建类sy6_1 (2)、创建三个线程,调用start()方法启动这三个线程 (3)、保存文件,调试并编译运行程序。 参考程序运行效果: 2....