zoukankan      html  css  js  c++  java
  • 两个线程分别打印 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();
        }
    }
    
  • 相关阅读:
    Scrum敏捷开发中的各种会议到底怎么开?
    敏捷的方法与误区
    原创:分享封装好的面向JAVA的memcached客户端操作类
    ReactRouter路由配置
    脚手架创建react项目
    React基础知识
    Fetch请求
    redux学习笔记
    npm install常用用法
    python3+selenium3自动化8——当click事件失效,如何解决 测试
  • 原文地址:https://www.cnblogs.com/Draymonder/p/10562488.html
Copyright © 2011-2022 走看看