文档章节

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

o
 osc_n6euf5h6
发布于 2019/03/20 01:20
字数 189
阅读 7
收藏 0
cas

精选30+云产品,助力企业轻松上云!>>>

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();
    }
}
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
经典面试题——两个线程交替打印奇数和偶数

前提 今天下班时候和同事聊天偶然听到面试题“两个线程交替打印奇数和偶数”的实现,这里做一个复盘。 复盘 场景一:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用对象监视器实...

osc_pa25fsb2
2019/07/02
15
0
经典面试题-两个线程交替打印奇数和偶数

点击上方蓝色“趣学程序”,选择“设为星标” 本文分享自微信公众号 - 趣学程序(quxuecx)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入...

趣学程序-shaofeer
07/10
0
0
面试题-使用线程交替打印奇数偶数

这世上有三样东西是别人抢不走的:一是吃进胃里的食物,二是藏在心中的梦想,三是读进大脑的书 分析题目。需要使用两个线程交替打印奇偶数。 使用同步锁解决这个问题 使用信号量来实现交替打...

osc_urm28qtx
2019/05/21
2
0
Java 实现多线程切换等待唤醒交替打印奇偶数

引言 在日常工作生活中,可能会有用时几个人或是很多人干同一件事,在java编程中,同样也会出现类似的情况,多个线程干同样一个活儿,比如火车站买票系统不能多个人买一到的是同一张票,当某个...

osc_hpzuj4e3
2019/05/29
4
0
LeetCode:打印零与奇偶数【1116】

LeetCode:打印零与奇偶数【1116】 题目描述 假设有这么一个类: class ZeroEvenOdd { } 相同的一个 ZeroEvenOdd 类实例将会传递给三个不同的线程: 线程 A 将调用 zero(),它只输出 0 。 线...

osc_ygiycxyf
2019/07/31
2
0

没有更多内容

加载失败,请刷新页面

加载更多

基于 opencv 的图像处理入门教程

点击上方“算法猿的成长“,关注公众号,选择加“星标“或“置顶” 总第 146 篇文章,本文大约 5000 字,阅读大约需要 20 分钟 前言 虽然计算机视觉领域目前基本是以深度学习算法为主,但实际...

kbsc13
前天
13
0
屁宝杀手升级啦!支持 Creator 2.4.0及所有2.X版本

2017年无意间写了两篇关于在 Cocos Creator 中使用 Protobufjs 的文章,随后开始了自己第一个副业产品pbkiller—屁宝杀手!没想到,一个小小的 Creator 插件工具,还活了这么久! 经过3年,直...

张晓衡
前天
6
0
使用HTML5的自定义数据属性的jQuery选择器 - jQuery selectors on custom data attributes using HTML5

问题: I would like to know what selectors are available for these data attributes that come with HTML5. 我想知道哪些选择器可用于HTML5附带的这些数据属性。 Taking this piece of H......

javail
昨天
18
0
使用Jibri进行Jitsi Meet视频录制

前言 我们在做视频会议系统的时候,通常都会有会议录制功能,那么作为视频会议开源的翘楚,Jitsi是怎么做这一点的,在官方文档及其隐晦的情况下,我们该怎么成功搭建视频录制服务呢?下面我就...

死磕音视频
昨天
12
0
虚拟dom

一、什么是虚拟dom virtual dom(虚拟dom),是由普通的js对象来描述dom对象,因为不是真实的dom,所以叫virtual dom。 二、为什么要用虚拟dom来描述真实的dom? 举个例子,我们获取一个dom元素...

一生懸命吧
昨天
47
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部