Fork me on GitHub

随笔分类 -  Java并发编程

摘要:Java集合体系主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。 下面贴出Map的继承/实现关系。Collection的子孙太多,这里就不贴出来了。感兴趣的可以自己用idea生成。 概括来说: Java中4大集合 阅读全文
posted @ 2022-09-01 14:22 JackpotHan 阅读(220) 评论(0) 推荐(0) 编辑
摘要:何为异步? 首先必须强调一个基础概念,异步是一种设计方式,异步操作不等于多线程。异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程。注:不是所有的异步都需要回调,异步通常处理 I/O 场景,即读写。读当然需要回调,不然干嘛读?可写就不必回调啦。所以,有 阅读全文
posted @ 2022-07-23 14:03 JackpotHan 阅读(4420) 评论(0) 推荐(0) 编辑
摘要:限流是高并发场景中重要的一环,实现限流的方案有很多种,今天围绕Redis来简单介绍几种限流方案。题外话:Redis不仅仅是可以做限流,还可以做数据统计、排行榜、附近的人等功能,有空我会写一篇介绍一下。 常见的限流算法有:计数器、滑动窗口、漏桶算法、令牌桶等。那么如何使用Redis来实现呢? 基于Re 阅读全文
posted @ 2022-07-13 14:31 JackpotHan 阅读(5263) 评论(0) 推荐(1) 编辑
摘要:什么是延时队列? 顾名思义:首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。 延时队列的应用 延时队列在项目中的应用还是比较多的,尤其像电商类平台: 1、订单成功后,在30分钟内没有支付,自动取消订单 2、外卖平台发送订餐通知,下单成功后 阅读全文
posted @ 2021-12-10 10:33 JackpotHan 阅读(440) 评论(0) 推荐(0) 编辑
摘要:备注:以下为2G内存配置,可根据实际情况做调整 # 最大堆大小 -Xmx2048m # 初始堆大小 -Xms2048m # 年轻代大小 -Xmn1024m #每个线程栈大小,JDK5.0以后每个线程堆栈大小为1M。 -Xss512k # Eden区与Survivor区的大小比值,设置为8,则两个Su 阅读全文
posted @ 2021-11-29 15:23 JackpotHan 阅读(594) 评论(0) 推荐(0) 编辑
摘要:在上一章我们从宏观上介绍了ThreadPoolExecutor,本文将深入解析一下线程池的具体实现原理 原理解析 线程池状态 在ThreadPoolExecutor中定义了一个volatile变量,另外定义了几个static final变量表示线程池的各个状态: runState表示当前线程池的状态 阅读全文
posted @ 2018-09-21 18:03 JackpotHan 阅读(338) 评论(0) 推荐(0) 编辑
摘要:什么是线程池? 线程池就是以一个或多个线程循环执行多个应用逻辑的线程集合. 为什么用线程池? 创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率 例如: 记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3 如果T1+T3>T2,那么是不是说开启一个线程来 阅读全文
posted @ 2018-09-21 18:02 JackpotHan 阅读(319) 评论(0) 推荐(0) 编辑
摘要:在介绍Java的阻塞队列之前,我们简单介绍一下队列。 队列 队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是说,队列以一种先进先出的方式管理数据,如果你试图向一个已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,将导致线程阻塞.在多线程 阅读全文
posted @ 2018-09-21 18:01 JackpotHan 阅读(237) 评论(0) 推荐(0) 编辑
摘要:上一章我们已经简要的介绍了Java中的一些锁,本章我们就详细的来说说这些锁。 synchronized锁 synchronized锁是什么? synchronized是Java的一个关键字,它能够将代码块(方法)锁起来 它使用起来是非常简单的,只要在代码块(方法)添加关键字synchronized, 阅读全文
posted @ 2018-09-21 17:59 JackpotHan 阅读(1342) 评论(0) 推荐(0) 编辑
摘要:在学习或者使用Java的过程中进程会遇到各种各样的锁的概念:公平锁、非公平锁、自旋锁、可重入锁、偏向锁、轻量级锁、重量级锁、读写锁、互斥锁、死锁、活锁等,本文将简概的介绍一下各种锁。 公平锁和非公平锁 公平锁是指多个线程在等待同一个锁时,必须按照申请锁的先后顺序来一次获得锁。 公平锁的好处是等待锁的 阅读全文
posted @ 2018-09-19 14:29 JackpotHan 阅读(257) 评论(0) 推荐(1) 编辑
摘要:上一章已经提到“如果一个进程被多次回滚,迟迟不能占用必需的系统资源,可能会导致进程饥饿”,本文我们详细的介绍一下“饥饿”和“公平”。 Java中导致饥饿的原因 在Java中,下面三个常见的原因会导致线程饥饿: 高优先级线程吞噬所有的低优先级线程的CPU时间 你能为每个线程设置独自的线程优先级,优先级 阅读全文
posted @ 2018-09-19 11:41 JackpotHan 阅读(925) 评论(0) 推荐(1) 编辑
摘要:简介 当两个以上的运算单元,双方都在等待对方停止运行,以获取系统资源,但是没有一方提前退出时,就称为死锁。在多任务操作系统中,操作系统为了协调不同进程,能否获取系统资源时,为了让系统运作,必须要解决这个问题。 例如,如果线程1锁住了A,然后尝试对B进行加锁,同时线程2已经锁住了B,接着尝试对A进行加 阅读全文
posted @ 2018-09-19 10:32 JackpotHan 阅读(352) 评论(0) 推荐(0) 编辑
摘要:提到ThreadLocal,有些Android或者Java程序员可能有所陌生,可能会提出种种问题,它是做什么的,是不是和线程有关,怎么使用呢?等等问题,本文将总结一下我对ThreadLocal的理解和认识,希望让大家理解ThreadLocal更加透彻一些。 ThreadLocal是什么 Thread 阅读全文
posted @ 2018-09-18 14:38 JackpotHan 阅读(282) 评论(0) 推荐(0) 编辑
摘要:上一节已经讲到,使用Synchronzied代码块可以解决共享对象的竞争问题,其实还有其他的方法也可以避免资源竞争问题,我统称他们为Java同步块。Java 同步块(synchronized block)用来标记方法或者代码块是同步的,可以避免资源竞争,避免死锁。。 Java 同步关键字(synch 阅读全文
posted @ 2018-09-17 22:08 JackpotHan 阅读(458) 评论(0) 推荐(0) 编辑
摘要:前面我们已经介绍了:当对象和变量存储到计算机的各个内存区域时,必然会遇到的两个问题及解决方法 共享对象的可见性-- 解决方法:使用java volatile关键字 共享对象的竞争现象 -- 解决方法:使用java synchronized代码块 那么,volatile和 synchronized有什 阅读全文
posted @ 2018-09-17 21:49 JackpotHan 阅读(280) 评论(0) 推荐(1) 编辑
摘要:Java内存模型 前面讲到了Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memor 阅读全文
posted @ 2018-09-17 17:56 JackpotHan 阅读(293) 评论(0) 推荐(0) 编辑
摘要:竞态条件与临界区 在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源。当多个线程同时访问同一个资源,并且其中的一个或者多个线程对这个资源进行了写操作,才会产生竞态条件。多个线程同时读同一个资源不会产生竞态条件。如,同一内存区(变量,数组,或对象)、系统(数据库,web ser 阅读全文
posted @ 2018-09-14 17:57 JackpotHan 阅读(252) 评论(0) 推荐(0) 编辑
摘要:Java线程 Java线程类也是一个object类,它的实例都继承自java.lang.Thread或其子类。 Java可以用如下方式创建一个线程: 执行该线程可以调用该线程的start()方法: 在上面的例子中,我们并没有为线程编写运行代码,因此调用该方法后线程就终止了。 创建、执行线程的方式 无 阅读全文
posted @ 2018-09-14 14:27 JackpotHan 阅读(330) 评论(0) 推荐(0) 编辑
摘要:多线程发展进程 在过去单CPU时代,单任务在一个时间点只能执行单一程序;发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程--虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。 阅读全文
posted @ 2018-09-12 16:25 JackpotHan 阅读(292) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示