原创:转载需注明原创地址 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 + "进不去车间, 因为里面有人了"); } } }
打印如下:
小刚想进来车间, 看看里面有没有人
小刚进来车间了, 里面没人呢
小刚开始奋力工作了.....
小明想进来车间, 看看里面有没有人
小明进不去车间, 因为里面有人了
小刚工作完了, 走了