题目

思路

这道题总共有2种思路

利用wait和notify函数利用volatile的可见性(volatile能保证可见性,有序性,不能保证原子性,这个一定要牢牢记住)利用Exchanger类

方法一

方法二

有更好的方式欢迎大家在下方留言

放一下方法一的代码,方便大家验证

public class Solution {    private static final Object lock = new Object();    private static volatile boolean flag = true;    public static void main(String[] args) throws InterruptedException {        char[] result = new char[52];        long totalStart = System.currentTimeMillis();        Thread thread1 = new Thread(() -> {            long thread1Start = System.currentTimeMillis();            for (int i = 0; i < 26; i++) {                synchronized (lock) {                    if (flag) {                        result[i * 2] = (char)('a' + i);                        flag = false;                        lock.notify();                    } else {                        try {                            lock.wait();                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                    }                }            }            long thread1Cost = System.currentTimeMillis() - thread1Start;            System.out.println("thread1Cost " + thread1Cost);        });        Thread thread2 = new Thread(() -> {            long thread2Start = System.currentTimeMillis();            for (int i = 0; i < 26; i++) {                synchronized (lock) {                    if (!flag) {                        result[i * 2 + 1] = (char)('A' + i);                        flag = true;                        lock.notify();                    } else {                        if (i != 25) {                            try {                                lock.wait();                            } catch (InterruptedException e) {                                e.printStackTrace();                            }                        }                    }                }            }            long thread2Cost = System.currentTimeMillis() - thread2Start;            System.out.println("thread2Cost " + thread2Cost);        });        thread1.start();        thread2.start();        thread1.join();        thread2.join();        // aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ        System.out.println(result);        long totalCost = System.currentTimeMillis() - totalStart;        // totalCost 119        System.out.println("totalCost " + totalCost);    }}

2中我建的表怎么是小写的_面试官:2个线程交替打印大小写英文字母,你会怎么实现?...相关推荐

  1. mq集群要建传输队列吗_面试官:消息队列这些我必问!

    作者:mousycoder segmentfault.com/a/1190000021054802 消息队列连环炮 项目里怎么样使用 MQ 的? 为什么要使用消息队列? 消息队列有什么优点和缺点? k ...

  2. 哈希表查找失败的平均查找长度_面试官:哈希表都不知道,你是怎么看懂HashMap的?...

    本文作者 作者:马可没有菠萝 链接: https://juejin.im/post/6876105622274703368 本文由作者授权发布. HashMap是Java面试中的必问考点之一,网上关于 ...

  3. md5后得到的32位字符串存储到mysql中太占空间了_面试官:你对MySQL高性能优化有什么规范建议?...

    推荐阅读:吊打面试官!MySQL灵魂100问,你能答出多少? 文章篇幅较长,建议先收藏再找个合适的时间阅读 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用 ...

  4. 我说MySQL里每张表不要超过100w数据,面试官让我回去等通知?

    V-xin:ruyuanhadeng获得600+页原创精品文章汇总PDF 目录 1.面试题 2.面试官心理分析 3.面试题剖析 1.面试题 事务的几个特点是什么? 数据库事务有哪些隔离级别? MySQ ...

  5. .jar中没有主清单属性_面试官问:为什么SpringBoot的 jar 可以直接运行?

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 来源 | https://urlify.cn/uQvIna SpringBoot提供了一个插件spring-boot-mav ...

  6. @data注解不生效_面试官:你经常在SpringBoot中使用的条件注解底层是如何实现的?你了解过吗?...

    SpringBoot内部提供了特有的注解:条件注解(Conditional Annotation).比如@ConditionalOnBean.@ConditionalOnClass.@Conditio ...

  7. redis查看key的过期时间_面试官:你在Redis中设置过带过期时间的Key吗?

    点击上方小伟后端笔记关注公众号 每天阅读Java干货文章 熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过 ...

  8. js中立即执行函数会预编译吗_面试官:聊聊对Vue.js框架的理解

    作者:yacan8 https://github.com/yacan8/blog/issues/26 本文为一次前端技术分享的演讲稿,所以尽力不贴 Vue.js 的源码,因为贴代码在实际分享中,比较枯 ...

  9. java semaphore(0)_面试官:说说Java中的信号量?Semaphore

    Semaphore (信号量)是由计算机科学家Dijkstra在1965年提出的,广泛应用不同的操作系统,在管程提出之前信号量就是并发编程领域的霸主!几乎所有并发的语言都支持信号量机制. Semaph ...

  10. java中double类型占几个字节_面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?...

    认识基本数据类型 在学习基本数据类型之前,我们先认识一下这两个单词:1.bit --位:位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为"0"或"1&quo ...

最新文章

  1. 有关架构图你需要了解的基础知识
  2. SQL基础【十六、Union】
  3. C++关键字(1)——const
  4. Linux综合练习——课件分发
  5. PSD分层素材模板,快速设计美妆类海报
  6. 当try和finally都包含return时
  7. 苹果电脑如何正确断网?macOS操作系统断网方法
  8. 中国气象局所有城市代码
  9. 网络安全等级保护三级产品清单整理
  10. 人人都能玩航拍 手把手教你装4轴
  11. 搭建一个 软件授权码管理系统
  12. 常见文件文件头和隐写术总结 CTF中Misc必备
  13. excel下拉隐藏_在Excel下拉列表中隐藏使用过的项目
  14. 图形界面介绍——Blockage相关
  15. 安卓中dumpsys命令使用
  16. php openssl函数手册,OpenSSL 函数 - PHP 7 中文文档
  17. 《流浪地球》让刘慈欣赚了多少钱?技术男搞写作原来这么简单
  18. 算法梳理(三)决策树
  19. 服务器上显示存储脱机,使存储空间直通服务器脱机以进行维护
  20. Android工程师进阶第四课 jmm内存模型和juc多线程基础

热门文章

  1. 部署和调优 2.1 squid正向代理
  2. 新增四则运算用户选择功能小程序
  3. centos lamp
  4. 浅谈网络游戏的设计——服务器端编程 (2)
  5. 图形数据库Neo4j(1)----简介及使用
  6. PCL三维点云拼接融合
  7. Atitit 信息检索 之音乐检索实践 艾提拉注 目录 1. 常规检索 歌手 歌名 1 1.1. 年代检索 1 1.2. 歌词检索(可以依靠web 1 1.3. 哼唱检索 原曲检索(可以使用酷
  8. Atitit 研发体系建立 数据存储与数据知识点体系知识图谱attilax 总结
  9. paip.invalid conversion from FormWdg* to SOCKET {aka unsigned int}
  10. 应用程序中主键ID生成与UUID