随笔分类 -  Java并发

摘要:这是最新的大厂面试系列,还原真实场景,提炼出知识点分享给大家。 点赞再看,养成习惯~ 微信搜索【 武哥聊编程 】,关注这个 Java 菜鸟。 昨天有个小伙伴去阿里面试实习生岗位,面试官问他了一个老生常谈的问题:你说一说 Java 创建线程都有哪些方式? 这哥们心中窃喜,这个老生常谈的问题早已背的滚瓜 阅读全文
posted @ 2020-04-09 13:29 程序员私房菜 阅读(1197) 评论(3) 推荐(3)
摘要:在 java5 以后,我们接触到了线程原子性操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,本文总结一下Atomic系列的类的使用方法,其中包含: | 类型 | Integer | Long | | | : : | : :| : : | : : 阅读全文
posted @ 2019-01-18 15:00 程序员私房菜 阅读(922) 评论(0) 推荐(0)
摘要:先看一个多线程间共享数据的问题: 设计四个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1。 从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个 data,共同操作一个 data。我们先把上面这个问题放在一边,慢慢分析多个线程之间共享数据的一些情况,从最简单开始, 阅读全文
posted @ 2019-01-17 10:50 程序员私房菜 阅读(1276) 评论(4) 推荐(0)
摘要:在前面我的一篇总结( "6. 线程范围内共享数据" )文章中提到,为了数据能在线程范围内使用,我用了 HashMap 来存储不同线程中的数据,key 为当前线程,value 为当前线程中的数据。我取的时候根据当前线程名从 HashMap 中取即可。 因为当初学习 HashMap 和 HashTabl 阅读全文
posted @ 2019-01-10 22:49 程序员私房菜 阅读(620) 评论(0) 推荐(1)
摘要:在前面的文章( "6. 线程范围内共享数据" )总结了一下,线程范围内的数据共享问题,即定义一个 Map,将当前线程名称和线程中的数据以键值对的形式存到 Map 中,然后在当前线程中使用数据的时候就可以根据当前线程名称从 Map 中拿到当前线程中的数据,这样就可以做到不同线程之间数据互不干扰。其实 阅读全文
posted @ 2019-01-08 16:37 程序员私房菜 阅读(453) 评论(1) 推荐(1)
摘要:假设现在有个公共的变量 data,有不同的线程都可以去操作它,如果在不同的线程对 data 操作完成后再去取这个 data,那么肯定会出现线程间的数据混乱问题,因为 A 线程在取 data 数据前可能 B 线程又对其进行了修改,下面写个程序来说明一下该问题: java public class Th 阅读全文
posted @ 2019-01-07 20:33 程序员私房菜 阅读(345) 评论(0) 推荐(0)
摘要:先看一个问题: 有两个线程,子线程先执行10次,然后主线程执行5次,然后再切换到子线程执行10,再主线程执行5次……如此往返执行50次。 看完这个问题,很明显要用到线程间的通信了, 先分析一下思路:首先肯定要有两个线程,然后每个线程中肯定有个50次的循环,因为每个线程都要往返执行任务50次,主线程的 阅读全文
posted @ 2019-01-06 18:31 程序员私房菜 阅读(365) 评论(0) 推荐(0)
摘要:我们知道,使用 关键字可以有效的解决线程同步问题,但是如果不恰当的使用 关键字的话也会出问题,即我们所说的死锁。死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。 下面写一个死锁的例子加深理解。先看程序,再来分析一下死 阅读全文
posted @ 2018-12-25 20:56 程序员私房菜 阅读(423) 评论(0) 推荐(0)
摘要:在多个线程同时操作相同资源的时候,就会遇到并发的问题,如银行转账啊、售票系统啊等。为了避免这些问题的出现,我们可以使用synchronized关键字来解决,下面针对synchronized常见的用法做一个总结。首先写一个存在并发问题的程序,如下: java public class Traditio 阅读全文
posted @ 2018-10-23 14:07 程序员私房菜 阅读(434) 评论(0) 推荐(0)
摘要:传统线程技术中有个定时器,定时器的类是Timer,我们使用定时器的目的就是给它安排任务,让它在指定的时间完成任务。所以先来看一下Timer类中的方法(主要看常用的 方法): 前面两个是在指定延迟后执行或者重复执行,后面两个是在指定时间执行或者重复执行。我们以前两个为例来研究一下定时器的使用。 先写一 阅读全文
posted @ 2018-10-21 12:53 程序员私房菜 阅读(238) 评论(0) 推荐(0)
摘要:传统的线程技术中有两种创建线程的方式:一是继承 类,并重写 方法;二是实现 接口,覆盖接口中的 方法,并把 接口的实现扔给 。这两种方式大部分人可能都知道,但是为什么这样玩就可以呢?下面我们来详细分析一下这两种方法的来龙去脉。 1. 揭秘Thread中run() 上面我们看到这两种方式都跟 方法有关 阅读全文
posted @ 2018-10-20 20:39 程序员私房菜 阅读(421) 评论(1) 推荐(0)