比如线程1输出0,线程2输出0,线程1输出1,线程2输出1。
既然有先后顺序,优先想到和顺序有关的锁,ReenTrantLock的公平锁,等待时间最长的线程优先获取锁。
代码如下:
public class AlternateDemo {
public static void main(String[] args) {
Task task = new Task();
Thread ta = new Thread(task);
Thread tb = new Thread(task);
ta.start();
tb.start();
}
static class Task implements Runnable {
private Lock lock = new ReentrantLock(true);
@Override
public void run() {
for (int i = 0; i <= 10; i++) {
lock.lock();
System.out.println(Thread.currentThread().getName() + " : " + i);
lock.unlock();
}
}
}
}
结果如下:
Thread-0 : 0
Thread-1 : 0
Thread-0 : 1
Thread-1 : 1
Thread-0 : 2
Thread-1 : 2
Thread-0 : 3
Thread-1 : 3
Thread-0 : 4
Thread-1 : 4
Thread-0 : 5
Thread-1 : 5
Thread-0 : 6
Thread-1 : 6
Thread-0 : 7
Thread-1 : 7
Thread-0 : 8
Thread-1 : 8
Thread-0 : 9
Thread-1 : 9
Thread-0 : 10
Thread-1 : 10