有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…
由于线程执行的不确定性,要保证这样有序的输出,必须控制好多线程的同步。
线程同步有两种基本方法:
(1) synchronized
(2) wait,notify,notifyAll
现在分别采用这两种方法来解答这道题目。
package multithread;
class XunleiLock
{
public String name = "A";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class XunleiInterviewMultithread {
public static void main(String[] args) {
XunleiLock lock = new XunleiLock();
new Thread(new XunleiPrinter("A", lock)).start();
new Thread(new XunleiPrinter("B", lock)).start();
new Thread(new XunleiPrinter("C", lock)).start();
}
}
class XunleiPrinter implements Runnable {
private String name = "";
private XunleiLock lock = null;
private int count = 10;
public XunleiPrinter(String name, XunleiLock lock) {
this.name = name;
this.lock = lock;
}
@Override
public void run() {
while (count > 0) {
synchronized (lock) {
if (lock.getName().equalsIgnoreCase(this.name)) {
System.out.print(name);
count--;
if (this.name.equals("A")) {
lock.setName("B");
} else if (this.name.equals("B")) {
lock.setName("C");
} else if (this.name.equals("C")) {
lock.setName("A");
}
}
}
}
}
}
第二种方法:修改线程主体:
package multithread;
class XunleiPrinter2 implements Runnable {
private String name = "";
private XunleiLock lock = null;
private int count=10;
public XunleiPrinter2(String name, XunleiLock lock) {
this.name = name;
this.lock = lock;
}
@Override
public void run() {
while(count>0) {
synchronized (lock) {
while(!lock.getName().equalsIgnoreCase(this.name)) {
try{
lock.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
System.out.print(name);
count--;
if (this.name.equals("A")) {
lock.setName("B");
} else if (this.name.equals("B")) {
lock.setName("C");
} else if (this.name.equals("C")) {
lock.setName("A");
}
lock.notifyAll();
}
}
}
}
分享到:
相关推荐
Java 多线程例子 Java 多线程是 Java 编程语言中的一种基本概念,它允许程序同时执行多个任务,从而提高程序的性能和效率。本文将通过三个实用的例子,讲解 Java 多线程的基本概念和使用方法。 第一个例子:创建多...
利用JAVA编写的多线程运行实例 压缩文件,可直接运行 ...利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行
Java多线程是Java编程中的重要概念,尤其在并发编程领域有着广泛的...通过对"java多线程实例"的学习,开发者可以深入理解线程的工作原理,提升解决并发问题的能力,这对于开发高并发的网络服务、数据库应用等至关重要。
总结起来,"Java多线程实例图形版"是一个结合理论与实践的教学资源,通过“哲学家就餐问题”这一经典案例,帮助开发者理解多线程的基本概念、并发问题以及解决策略。通过学习这个实例,不仅可以掌握Java多线程编程的...
Java 多线程实例 Java 多线程是Java编程语言的一个重要特性,它使得程序能够在同一时间执行多个任务,从而提高系统效率和资源利用率。本文将深入探讨Java中的线程概念、创建线程的方式以及如何实现线程的并发执行。...
总的来说,这个"java多线程实例"是一个实用的学习资源,它展示了如何利用Java的多线程特性进行高效的网络下载,并通过合理的线程同步和文件操作来实现资源的合并。对于想要深入理解Java多线程和网络编程的开发者来说...
Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...
在Java编程语言中,多线程是核心特性之一,它允许程序同时执行多个任务,从而提高了应用程序的效率和响应...文档“java多线程实例.docx”可能包含具体的示例代码和详细解释,建议参考学习,以加深对Java多线程的理解。
《哲学家就餐:Java多线程实例图形版》是一个经典的多线程问题,它通过模拟哲学家们在用餐时可能出现的饥饿情况,来探讨和解决并发编程中的资源竞争问题。这个例子源自计算机科学家Edsger W. Dijkstra,他提出了这个...
根据提供的文件信息,我们可以归纳出以下关于Java多线程的经典示例中的关键知识点: ### Java多线程实现方式 在Java中,实现多线程有两种主要的方法:通过继承`Thread`类或者实现`Runnable`接口。 #### 继承...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过继承`Thread`类和实现`Runnable`接口。 1. 继承Thread类: 当你需要创建一...
java多线程例子(1).pdf java多线程例子(1).pdf java多线程例子(1).pdf
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应性。在Java中,实现多线程有两种主要方式:通过实现`Runnable`接口或者继承`Thread`类。 首先,让我们从创建线程开始。当你...
java多线程实例下载,直接导入到eclipse即可java多线程实例下载,直接导入到eclipse即可java多线程实例下载,直接导入到eclipse即可java多线程实例下载,直接导入到eclipse即可
本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是程序执行的基本单元,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈,而共享堆...
在Java多线程编程中,理解如何创建和...总的来说,这个例子展示了Java多线程的基本操作,包括创建、启动、管理和通信。理解和掌握这些概念对于进行并发编程是至关重要的,可以帮助开发者构建高效、稳定的多线程应用。