有三个线程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多线程实例
6个非常经典的java多线程实例!欢迎下载!!!
java多线程的经典例子教程,精心整理的word文档。
java多线程实例,本实例中通过线程A和线程B说明的了程序在运行中是如何在线程A和线程B间转换的
详细的讲解了java多线程的原理,并配有代码进行实战,适合java初学者和想对多线程有进一步了解的人。
java多线程小程序实例 java多线程小程序实例
描述java多线程的例子,可供进一步学习多线程的人参考
java一个多线程的经典例子java一个多线程的经典例子
学习java多线程的经典例子,让你深刻了解java多线程编程。
java多线程例子(1).pdf java多线程例子(1).pdf java多线程例子(1).pdf
java多线程实例下载,直接导入到eclipse即可java多线程实例下载,直接导入到eclipse即可java多线程实例下载,直接导入到eclipse即可java多线程实例下载,直接导入到eclipse即可
很简单的一个java多线程例子,希望多大家有帮助
很好的JAVA多线程实例,方便初学都学习。
java 多线程例子.doc java 多线程例子.doc
哲学家就餐:Java多线程实例图形版 哲学家就餐是一个经典的Java多线程编程的实例,这是图形版。涉及到线程同步与互斥,临界区访问问题以及避免死锁的方法。 哲学家就餐:有五个哲学家绕着圆桌坐,每个哲学家...