Java线程--Atomic原子类使用

原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11871241.html

Java线程--Atomic原子类使用

package concurrent.atomic;

/**
 * 原子类测试类
 */
public class MainAtomic {
    public static void main(String[] args) {
        Worker worker1 = new Worker("小明");
        Worker worker2 = new Worker("小刚");
        new Thread(worker1).start();
        new Thread(worker2).start();
    }
}
package concurrent.atomic;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;

/**
 * 工作线程
 */
public class Worker implements Runnable {

    /**
     * 同时只有一个工人能进入车间
     */
    private static AtomicBoolean existsOne = new AtomicBoolean(false);
    private String workName;

    public Worker(String workName){
        this.workName = workName;
    }

    @Override
    public void run() {
    System.out.println(workName + "想进来车间, 看看里面有没有人");
if (existsOne.compareAndSet(false, true)) { System.out.println(workName + "进来车间了, 里面没人呢"); try { System.out.println(workName + "开始奋力工作了....."); TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(workName + "工作完了, 走了"); /** * 重置false状态 */ existsOne.set(false); } else { System.out.println(workName + "进不去车间, 因为里面有人了"); } } }

打印如下:

小刚想进来车间, 看看里面有没有人
小刚进来车间了, 里面没人呢
小刚开始奋力工作了.....
小明想进来车间, 看看里面有没有人
小明进不去车间, 因为里面有人了
小刚工作完了, 走了
原文地址:https://www.cnblogs.com/fanerwei222/p/11871241.html