首页 > 代码库 > java多线程面试题

java多线程面试题

有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…

由于线程执行的不确定性,要保证这样有序的输出,必须控制好多线程的同步。

线程同步有两种基本方法:

(1)    synchronized

(2)    wait,notify,notifyAll

现在分别采用这两种方法来解答这道题目。

 

 

public class Demo01 {

public static void main(String[] args) {

StartLock lock = new StartLock();

new Thread(new Method1("A", lock),"线程一").start();

new Thread(new Method1("B", lock),"线程二").start();

new Thread(new Method1("C", lock),"线程三").start();

}

}

 

class Method1 implements Runnable {

private String name = "";

private StartLock lock = null;

private int count=10;

public Method1(String name, StartLock 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("当前线程名:"+Thread.currentThread().getName()+" "+name+"    ");

if(name == "C"){

System.out.println() ;

}

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");

}

}

}

}

}

}

class StartLock {

public String name = "A";

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

 

//----------------------------------------------------------------------------------------------------------------------------------

//方法(二)线程类修改如下,其他类一样:

class Method2 implements Runnable {

private String name = "";

private StartLock lock = null;

private int count=10;

public Method2(String name, StartLock 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多线程面试题