-------5.12. Java多线程
文章平均质量分 66
在风中的意志
这个作者很懒,什么都没留下…
展开
-
[个人感悟] 多线程问题应该考察哪些问题? (Java篇)
作为编程初学者被问的最多的问题, 本文就这个问题. 详细的讲讲对方究竟为什么要问这个问题, 并且回答问题的主要思路框架.PS: 本文主体背景为Java语言. 其他语言应当为同理.原创 2024-06-02 23:57:46 · 449 阅读 · 1 评论 -
[Java多线程] Future及 Callable的使用解析
前言我们一直都知道, Java内的多线程主要有2种方式. 同步方式和异步方式. 同步方式, 我们一般是使用Runnbale接口; 异步方式, 我们一般使用的是Callable接口.原创 2021-11-28 23:50:22 · 808 阅读 · 0 评论 -
[Java基础] Java多线程之生活简述
前言1024程序员节. 今天写点干货.在Java的多线程内, 有非常多的组成和变量. 初学时, 经常拿捏不住. 下面我们带入生活的场景, 简单的描述下Java中的各种使用场景.多线程的基本组成 Thread (多人相同工作)在日常的生活中. 我们经常需要做一件事情. 我们认为时一个Task. 那么一个Task有时可以分成多个相同的Task, 以及多个不同的Task.比如: 饺子店出售饺子场景1-1: 使用的是速冻饺子. 店家只需要负责下饺子就可以了. 那么当客人比较多的时候. 一口锅自然是原创 2021-10-24 22:57:53 · 1387 阅读 · 0 评论 -
[Java基础] CyclicBarrier 使用及源码分析
CyclicBarrier 源码package java.util.concurrent;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class CyclicBarrier { private static class Generation { boolean broken = false; } pri原创 2021-10-17 23:48:19 · 238 阅读 · 0 评论 -
[多线程] 多线程工具之CountDownLatch
前言在Java中, 如何启动多个线程. 随后使某项任务分步执行.使用Join方法使用CountDownLatchCountDownLatch 内核心方法:await(): 等待. 当count值为0时, 才能继续执行.countDown(): 和方法名一样. 具体作用时将方法名称-1.getCount(): 获取当前count值.简单都小测试import java.util.concurrent.CountDownLatch;public class TestJava {原创 2021-10-10 23:56:19 · 458 阅读 · 0 评论 -
Java基础 悲观锁&乐观锁
前言悲观锁与乐观锁 只是2种不同的概念. 在JDK内各有不同的实现.解析悲观锁悲观锁. 即. 认为: 我们每次修改数据时, 都会有其他人来修改数据. 所以, 我们在进行更新数据时, 都会加锁进行控制.即 执行类似如下流程.1- 锁定2- 修改数据3- 解除锁定Java 中并发包的锁主要有2种: synchronized关键字与RentrantLock对象. 其中之一写法:public void update(OptimisticLockObject object, int val原创 2020-07-09 23:54:47 · 297 阅读 · 0 评论 -
Java 多线程(总章)
前言随着CPU核数的不断增多,多线程技术变得越来越重要.就个人感觉, 其也是分布式研究的基础. 在新时代内, 必然会从本机多线程协作向多机多进程协作进行发展.(最近比较火的Hadoop与Spark皆是如此).Java内的多线程技术来源已久, 从开始的Thread/Runnable结构、synchronized/volatile、wait / notify / join, 到现在的、AQS、Lo...原创 2019-03-27 10:54:07 · 298 阅读 · 0 评论 -
Java 多线程(一) Thread API 基础
前言Java自开发之初就具有多线程多特性,其于JDK1.5又增添了java.util.concurrent内增添了非常多的多线程组件.于本章之中,我们优先总结下在Java初期,我们经常使用的Java API. 其中,虽然stop()等方法已经废弃,我们仍然将其提出,并且提出其优/缺点.Java中主要的API有如下几部分内容:线程的创建 - Thread 类 与 Runnable接口线程的...原创 2019-03-18 01:37:15 · 489 阅读 · 0 评论 -
Java 多线程(二) Synchronized与Volatile关键字
前言在上章中,我们介绍了Java Thread API.本章我们介绍下Java中的Synchronized与Volatile关键字.在本章中,我们将介绍如下的几个模块:Synchronized关键字线程安全问题synchronized 关键字的使用对象锁与类锁Synchronized关键字修饰final类型的变量 & 静态变量Volatile关键字Volatil...原创 2019-03-19 01:46:03 · 583 阅读 · 0 评论 -
Java 多线程(三) 线程通信
前言在前一章我们介绍了线程中较为重要的几个关键字synchronized与volatile.synchronized关键字主要是用于标示线程的同步关系与锁.volatile主要是用于将线程内的局部变量与进程总变量之间的交互关系.本文我们将介绍下线程之间的相互通信.本章主要包括如下的几个部分的内容:wait()方法与notify()方法join()方法经典的生产者&消费者实现T...原创 2019-03-19 16:31:51 · 422 阅读 · 0 评论 -
Java 多线程(四) 锁与锁机制
前言在Java 多线程(二) Synchronized与Volatile关键字内我们介绍了synchronized关键字,以及与锁之间的关系.在本章中,我们将继续介绍这部分的内容同时,我们可以解决在Java 多线程(三) 线程通信中提及的,无法唤醒某个特定线程的问题.(Condition类进行解决) 此外我们还将介绍读锁与写锁,以及它们的优势.本章的主要内容如下所示:ReentrantL...原创 2019-03-20 00:59:17 · 1272 阅读 · 0 评论 -
HashMap 线程安全问题
前言我们紧接着上节ArrayList 线程安全问题讲下HashMap的线程安全问题.之前看书,书中经常会提及.HashTable是线程安全的,HashMap是线程非安全的.在多线程的情况下, HashMap会出现死循环的情况.此外,还会推荐使用新的JUC类 ConcurrentHashMap.今天,我们就将这些幺蛾子一网打尽. 本章, 将主要描述"为什么HashMap是非线程安全的? Has...原创 2019-03-21 21:55:33 · 20607 阅读 · 5 评论 -
ArrayList 线程安全问题
前言在观看多线程书籍的时候,经常会看到大家提及ArrayList与HashMap时候.皆会说明, ArrayList与HashMap类型都不是线程安全的. 那么,在传统的集合包内的集合类到底为什么线程非安全呢?在新的JUC包类又有什么可以替代呢? 让我们开始今天的部分.本章主要包括如下几个部分:为什么ArrayList是线程非安全的?替代措施(Vector类 / Colletions封装...原创 2019-03-21 17:33:39 · 29511 阅读 · 2 评论 -
JUC包 (一) 原子类 与 CAS操作
前言在前四个模块中,我们主要介绍了Thread类、synchronized与volatile关键字、线程通信、ReentrantLock锁. 本节我们将介绍Java中的原子操作.本章主要包括如下几个部分:原子更新基本类型原子更新数组原子更新引用类型原子更新字段类正文原子更新基本类型AtomicBooleanAtomicIntegerAtomicLong// Int...原创 2019-03-20 01:48:14 · 541 阅读 · 0 评论 -
JUC包 (二) CountDownLatch、CyclicBarrier、Semaphore 工具类
前言在Java 多线程(三) 线程通信内我们介绍了可以使用join()方法来控制某个线程在一众线程后执行. 正这一节中,我们将介绍三种工具类,同样实现这一目标. 三种工具使用场景各部相同.本章主要分为如下几个部分:CountDownLatch类CycleBarrier类Semaphore类正文join()方法实现在前文中,我们提及.使用join()方法可以非常容易的实现这部分...原创 2019-03-20 02:28:21 · 508 阅读 · 0 评论 -
JUC包(三) 锁与锁实现(AQS)
前言在原 JUC包 (一) 原子类 与 CAS操作中我们主要了解了什么是原子操作,以及原子操作的实现CAS(Compare ans Swap)操作. 本章,我们继续接着介绍使用CAS原理实现的锁操作. 锁在JUC包中使用非常广泛, 其取代了传统的synchronized关键字被广泛使用. 下文中,我们将一起了解锁的实现原理与基本使用场景.队列同步器(AQS)AQS,是(Abstract ...原创 2019-03-26 20:24:29 · 506 阅读 · 0 评论 -
JUC包(四) 并发容器与框架
前言在经过前几章的AQS与CAS等原理的轰炸之后. 本章, 我们将了解下JUC包内常见的并发容器.对于各种的并发容器, 我们会各取一个进行细说.Map类型容器(CurrentHashMap)Queue类型容器(ConcurrentLinkedQueue)阻塞队列类型容器(BlockedLinkedQueue)正文在叙述之前, 我们先列举下JUC包内提供给的常见容器.List...原创 2019-03-27 00:37:58 · 452 阅读 · 0 评论 -
JUC包(五) 线程池
前言在前面的篇章中.我们将解了线程/锁/多线程容器.本章我们将介绍一个用于管理线程的容器:线程池.正文线程池基本构造如下所示:基本使用步骤如下:步骤1: 核心线程池是否已满? 未满直接执行,满了放入等待队列BlockedQueue中.步骤2: 等待队列是否已满? 未满放入其中, 满了执行步骤3.步骤3: 线程池是否已满?未满放入其中, 满了执行步骤4.步骤4: 使用创建时指定的...原创 2019-03-27 01:29:09 · 347 阅读 · 0 评论 -
JUC包(六) Executor框架
前言在上文中, 我们介绍了线程池的基本构造与使用原理. 本章, 我们将介绍下线程池的上一层的包装Executor.正文为了应对不同的场景, Java设计者设计出不同的线程池ThreadPoolExecutorFixedThreadPool 固定大小线程池SingleThreadPool 单线程线程池CachedThreadPool 带缓存线程池(大小无界)Schedul...原创 2019-03-27 01:46:44 · 363 阅读 · 0 评论 -
Java 多线程技巧
总结本章主要记录.Java多线程分析和使用过程中的一些技巧.后续的内容也会陆续补充在此处.正文如何Dump文件?使用jstack -l <pid> >> filename. 例如: jstack -l 20866 > hello.log参考如何分析Thread Dump(收集)Dump文件JAVA dump查看线程运行情况2019-03-2...原创 2019-03-23 10:21:32 · 485 阅读 · 0 评论 -
Java 多线程面试题
前言在看完《Java多线程编程核心技术》与《Java并发编程的艺术》之后,对于多线程的理解到了新的境界. 先拿如下的题目试试手把.投行面试Q1: 现在有线程 T1、T2 和 T3。你如何确保 T2 线程在 T1 之后执行,并且 T3 线程在 T2 之后执行?答案: 使用Thread.join()方法即可.当然JUC包内提供了CountDownLatch与CyclicBarrier工具...原创 2019-03-27 20:06:51 · 2654 阅读 · 2 评论