引用
原题:有三个线程ID分别是A、B、C,请用多线程编程在屏幕上循环打印10次ABCABC…… 。
package jstyle;
public class TestTread {
private int i,j,count,times;
private Object o = new Object();
public void IdPrint(int t,String...ids){
while(Thread.activeCount()!=1){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(Thread.activeCount()==1){
System.out.println();
}
}
times = t;
count = ids.length;
for(i=0,j=0; j<count; j++){
new Thread(new Runnable(){
int pos = j;
public void run(){
synchronized (o) {
while(i<times*count){
if(i%count==pos){
i++;
System.out.print(Thread.currentThread().getName());
o.notifyAll();
}
try {
o.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
o.notifyAll();
}
};
},ids[j]).start();
}
}
public static void main(String[] args) throws InterruptedException{
new TestTread().IdPrint(9,"a","b","c");
new TestTread().IdPrint(1,"d","e");
}
}
abcabcabcabcabcabcabcabcabc
de
引用
以上代码对该题做了适当拓展,支持不同的ID取值及打印次数,同时有效控制了并发可能引起的打印错乱。
遗留问题:死锁风险。就代码来看,任一线程异常中断后,可能会造成其它线程持久wait。解决方法有待研究。
分享到:
相关推荐
在这个"多线程依次循环打印26个英文字母"的问题中,我们主要关注如何在多个线程之间同步操作,确保字母按照顺序正确地输出。这里涉及了`条件队列`和`lock`两个关键概念。 首先,让我们理解一下`多线程`。在单核...
此外,`main`线程也包含一个`for`循环,用于打印"main:"和当前循环次数,以便我们能观察到多线程与主线程的并发执行情况。 运行`Example02`类,我们将看到类似图10-2所示的结果,其中`蜘蛛侠`和`钢铁侠`线程以及...
Qt 多线程及简单实例 demo。 多线程的几大特点: 1.多线程的执行顺序无法保证,...本例中的线程(workthread类)实现的功能是,从0到9循环打印,0至9各占一排。 则该线程的具体实现详见demo。 demo环境为qt5.9 64位
Java多线程连续打印abc实现方法详解 Java多线程连续打印abc实现方法详解是 Java 编程语言中的一种常见问题,旨在解决三个线程同时执行,要求打印出10个连着的abc的难题。该问题的解决方案需要使用同步机制来确保三...
在Python编程中,多线程是一种...综上所述,通过Python的`threading`库,我们可以轻松地实现多线程来同时执行两个`while`循环,而`zip`函数则提供了遍历多个列表的便利。这些技术在处理并发任务和数据处理时非常有用。
Java多线程应用实现主要涉及两种方式:继承Thread类和实现Runnable接口。这两种方法都是为了在Java程序中创建并管理多个并发执行的任务,从而提高程序的执行效率。 1. 继承Thread类: 当一个类直接继承Thread类时,...
4. **Java实现多线程的两种方式**:通过继承`Thread`类或实现`Runnable`接口来创建线程。 5. **临界区、对象锁、互斥、同步等核心概念**:这些概念是实现线程安全的基础,其中临界区是指一段不能被多个线程同时访问...
在GUI(图形用户界面)程序中,多线程常用于实现后台处理,如加载大文件或执行耗时操作,而主线程则保持界面的响应性,显示实时的进度信息。 "进度条"是用户界面中的一个重要元素,它为用户提供操作执行的可视化...
此外,线程还可以利用读写锁(read-write lock)来实现多线程的并发读取和独占写入。读写锁允许多个线程同时读取资源,但写入时会阻止其他读写操作。还有线程局部存储(TLS,Thread Local Storage),它可以为每个...
本项目"多线程测试程序"聚焦于如何在一个应用程序中利用多线程来分别实现数据的发送和打印,旨在帮助开发者理解和实践多线程的运用。 1. **多线程概念** 多线程是指一个进程中可以同时运行多个并发执行的线程。在...
这段代码是.NET环境中一个关于多线程编程的经典示例,主要展示了如何使用Mutex进行线程同步以及处理线程的顺序问题。Mutex是一个临界区对象,用于控制对共享资源的并发访问,确保同一时间只有一个线程能执行特定的...
- **题2**:通过实现Runnable接口创建新线程,main线程循环打印"main",新线程循环打印"new"。 - **题3**:模拟三个线程(代表老师)分发学习笔记,可以使用synchronized关键字或Lock接口(如ReentrantLock)确保...
关于C#多线程学习,本篇将深入探讨在C#中如何管理和操作线程,包括启动、停止、暂停线程、调整线程优先级等关键知识点。 ### 启动线程 在C#中,启动一个新线程通常通过`Thread`类实现。创建一个新的线程对象时,...
这种多线程实现的并发打印问题,展示了Java中线程同步的重要性和使用技巧,包括使用synchronized关键字保证线程安全,以及wait()、notify()的配合使用来协调线程间的执行顺序。通过这种方式,我们可以根据需求创建...
在.NET框架中,多线程主要是通过`System.Threading`命名空间来实现的。为了简化多线程的使用,C#提供了丰富的API和工具支持,使得开发者能够更加高效地创建和管理线程。 #### 创建线程 创建一个线程通常涉及到以下...
补充知识中提到了另一种多线程顺序打印数字的问题。这里展示了两种方法: 方法一:三个线程各自竞争同步锁,只有当线程持有的数字与当前`pos`匹配时才打印。这种方式会导致大量无效的循环,因为线程可能会不断尝试...
例如,`TwoThread`类继承自`Thread`,在其`run()`方法中定义了循环打印“New thread”的行为。 - 然而,这种方式的一个局限性是,如果已有类已经继承了其他类,则无法再次继承`Thread`类,这限制了其灵活性。 2. *...
在JavaScript中,由于其单线程的特性,与Java等多线程语言相比,实现多线程打印可能会有所不同。但JavaScript提供了Event Loop和Promise、async/await等机制,可以模拟实现类似的效果。以下是对这个话题的详细解释:...
在多线程编程中,为了避免多个线程同时访问同一资源导致的数据不一致问题,通常需要使用锁机制来同步线程的执行顺序。Python的`threading`模块提供了一种名为`RLock`的递归锁,它可以被同一个线程多次获得而不释放。...
基于Windows的多线程编程》是一份关于Windows平台下多线程编程的文档,主要涵盖了进程与线程的概念、多线程的实现原理、多线程的问题、线程的分类以及线程的同步等核心知识点。 1. **进程与线程**: - **进程**:...