- 美团面试题:用2个线程交替打印helloworld:
t1: h
t2: e
t3: l
t4: l
t5: o
t6: w
……
import java.util.concurrent.atomic.AtomicInteger;
public class PrintHelloWord{
private static AtomicInteger index = new AtomicInteger(0);
private static String s = "helloWorld";
static class MyThread1 implements Runnable {
@Override
public void run() {
while (true) {
while (index.get() % 2 != 0) {
Thread.yield();
}
System.out.println("MyThread1:" + s.charAt(index.get()));
index.getAndIncrement();
}
}
}
static class MyThread2 implements Runnable {
@Override
public void run() {
while(true) {
while (index.get() % 2 == 0) {
Thread.yield();
}
System.out.println("MyThread2:" + s.charAt(index.get()));
if (index.get() == 9) {
index.set(0);
System.out.println("-------------------");
} else {
index.getAndIncrement();
}
}
}
}
public static void main(String[] args) {
Thread t1 = new Thread(new MyThread1());
Thread t2 = new Thread(new MyThread2());
t1.start();
t2.start();
}
}
-------------------
MyThread1:h
MyThread2:e
MyThread1:l
MyThread2:l
MyThread1:o
MyThread2:W
MyThread1:o
MyThread2:r
MyThread1:l
MyThread2:d
-------------------
MyThread1:h
MyThread2:e
MyThread1:l
MyThread2:l
MyThread1:o
MyThread2:W
MyThread1:o
MyThread2:r
MyThread1:l
MyThread2:d
-------------------
MyThread1:h
MyThread2:e
MyThread1:l
MyThread2:l
MyThread1:o
MyThread2:W
MyThread1:o
MyThread2:r
MyThread1:l
MyThread2:d
……
两个线程交替打印字符