交替打印奇数偶数,关键在于状态的改变,可以使用synchronized关键字来约束,也可以使用wait(),notify()方法约束,但是上述方法要求持有对象锁和释放对象锁,代价较大。而原子变量底层实现是基于cas,代价较小,代码如下
package TreadCommunicate;
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicPrint {
public static void main(String[] args) {
//定义一个整型原子变量
AtomicInteger flag = new AtomicInteger(0);
//打印偶数作业
Runnable a = new Runnable() {
@Override
public void run() {
while(true) {
if(flag.get() % 2 == 0) {
System.out.println(flag.get()); //偶数判断
flag.incrementAndGet(); //原子操作 变量加一
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
//打印奇数作业
Runnable b = new Runnable() {
@Override
public void run() {
while(true) {
if(flag.get() % 2 == 1) { //奇数判断
System.out.println("---"+flag.get());
flag.incrementAndGet(); //原子操作 变量加一
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
//提交作业, 开启线程
new Thread(a).start();
new Thread(b).start();
}}