• 两个线程分别打印 1- 100,A 打印偶数, B打印奇数。


    1. 直接用CAS中的AtomicInteger

    package concurency.chapter13;
    
    import java.util.concurrent.atomic.AtomicInteger;
    
    /**
     * @auther draymonder
     */
    public class PrintOddAndEven {
        public static volatile boolean flag = false;
    
        public static AtomicInteger num = new AtomicInteger();
    
        public static void main(String[] args) {
            new Thread(()->{
                while(num.get() < 100) {
                    if(flag) {
                        System.out.println(Thread.currentThread() +  " " + num.getAndIncrement());
                        flag = false;
                    }
                }
    
            }, "奇数").start();
    
            new Thread(()->{
                while(num.get() < 100) {
                    if(!flag) {
                        System.out.println(Thread.currentThread() + " " + num.getAndIncrement());
                        flag = true;
                    }
                }
            }, "偶数").start();
        }
    }
    

    第二种 带锁版

    注意 奇数是 < 100 偶数是<=100

    package concurency.chapter13;
    
    /**
     * @auther draymonder
     */
    public class Print2 {
        // flag = 0 now odd   flag = 1 now even
        public static volatile boolean flag = true;
        public static final Object lock = new Object();
        public static volatile int num = 0;
    
        public static void main(String[] args) {
            new Thread(()->{
                while(num < 100) {
                    synchronized (lock) {
                        if (flag) {
                            try {
                                lock.wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                        System.out.println(Thread.currentThread() + " " + num++);
                        flag = true;
                        lock.notifyAll();
                    }
                }
            },"奇数").start();
            new Thread(()->{
                while(num <= 100) {
                    synchronized (lock) {
                        if (!flag) {
                            try {
                                lock.wait();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                        System.out.println(Thread.currentThread() + " " + num++);
                        flag = false;
                        lock.notifyAll();
                    }
                }
            },"偶数").start();
        }
    }
    
  • 相关阅读:
    jQuery中的事件与动画
    jQuery选择器
    Flask学习【第3篇】:蓝图、基于DBUtils实现数据库连接池、上下文管理等
    Flask学习【第2篇】:Flask基础
    Flask学习【第1篇】:Flask介绍
    Python学习总目录
    Linux--安装Python3&虚拟环境
    Linux基础之vim
    Linux基础值Shell
    Linux文件系统结构
  • 原文地址:https://www.cnblogs.com/Draymonder/p/10562488.html
Copyright © 2020-2023  润新知