java 多线程例子

有三个线程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();

}

}

}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值