
JUC
JUC
不想当程序汪的第N天
我没秃,我还不够强
展开
-
谈谈多线程有几种获取方式,你面试肯定被问过!!
获取多线程的多种方式Java获取多线程的方式总共有四种,在Jdk5之前只有两种,Jdk5之后新增到了四种。继承Thread类实现Runnable接口实现Callable接口从线程池中获取原创 2020-06-11 08:18:16 · 562 阅读 · 0 评论 -
一个小Case,了解读写锁作用
在项目中最重要的就是数据的读取和写入,保证数据写入的一致性是重中之重,下面通过一个小case,模拟如果不对读写操作进行控制会发生什么情况。class Cache{ private volatile Map<String, Object> map = new HashMap<>(); /** * 写入方法 * @param key * @param value */ public void put(String key, Object value) { t原创 2020-06-03 15:33:20 · 309 阅读 · 3 评论 -
JUC中常用的三种辅助类,你知道吗?
JUC中提供了三种常用的辅助类,通过这些辅助类可以很好的解决线程数量过多时Lock锁的频繁操作。这三种辅助类为:CountDownLatchCyclicBarrier21.CountDownLatch下图是Jdk中解释的CountDownLatch类功能,简单而言,在实例化时,需要传入一个信号量,每当一个线程执行后,信号量减1,当信号量为0时,释放阻塞的线程。用个小Demo模拟,需求是启动5个线程,当5个线程执行完后,main线程才能继续执行,如果不使用CountDownLatch,线程原创 2020-05-28 21:38:10 · 404 阅读 · 0 评论 -
集合类安全问题
集合类安全问题集合类在写项目的过程中使用的十分频繁,但其实常用的几种集合类并不是线程安全的,在多线程的场景下使用可能会出现问题,用一个小case来模拟一下,本文采用ArrayList为例,Map和Set原理类似。Eg: 新建个字符串集合,遍历,一边往集合里写数据,一边打印集合内数据。public static void main(String[] args) { List<String> list = new ArrayList<>(); for (int i =原创 2020-05-24 22:20:26 · 196 阅读 · 0 评论 -
多线程8锁问题
多线程8锁问题在多线程环境中,访问资源类的顺序到底是如何?最近,在网络上看到一道题目,通过多线程的8种锁情况了解访问资源类的顺序。标准访问,先打印邮件方法还是短信方法?class Phone{ public synchronized void sendEmail(){ System.out.println("----sendEmail----"); } public synchronized void sendSMS(){ System.原创 2020-05-15 11:18:44 · 236 阅读 · 4 评论 -
生产者消费者问题
生产者消费者问题题目: 两个线程,可以操作初始值为0的一个变量,实现一个线程对变量加1,一个线程对变量减1,实现交替,进行10轮,保证初始值为0生产者消费者问题是非常经典的多线程交互问题,实现线程间相互交替工作。解决方案:通过 Synchronized 同步关键字实现通过 JUC 的 Lock 的 Condition 实现Synchronized 同步...原创 2019-11-06 20:48:22 · 168 阅读 · 0 评论 -
多线程购票问题
购票问题题目: 三个售票员 卖出 30张票从购票问题入手,购票问题涉及到多线程并发问题,多线程同时访问卖票资源,怎么保证数据一致性是最重要的问题。解决方案:在方法上添加 synchronized 同步标志控制线程访问,一次只能有一个线程访问该方法。JDK1.5后提供的JUC(Java并发包)。个人进行多线程编程按照三步骤: 在高内聚低耦合的前提下: 线程-----操作----...原创 2019-11-06 15:22:18 · 460 阅读 · 0 评论