面试阿里遇到的题目
面试阿里,需要在线做题。第一题就是循环打印的题目。具体题目为两个线程,一个打印奇数,一个打印偶数。
思路
直观的思路是,用reentrantLock,然后还有Condition来实现线程的协作。但是面试官也问到有没有无锁算法。这里既然是无锁算法,那肯定要采用cas这些了,因此直接用atomic类来实现就好了。
具体代码
public class Interview {
static volatile AtomicInteger count = new AtomicInteger(0);
static class T1 implements Runnable {
@SneakyThrows
@Override
public void run() {
System.out.println("T1 start run");
while (count.get() <= 100) {
if (count.get()%2 != 0) {
System.out.println("T1:" + count.get());
count.incrementAndGet();
}
else {
continue;
}
}
}
}
static class T2 implements Runnable {
@SneakyThrows
@Override
public void run() {
System.out.println("T2 start run");
while (count.get() <= 100) {
if (count.get()%2 == 0) {
System.out.println("T2:" + count.get());
count.incrementAndGet();
}
else {
continue;
}
}
}
}
}
这里其实就直接采用