- 博客(19)
- 资源 (76)
- 收藏
- 关注
原创 Java 并发底层知识,锁获取超时机制知多少?
当我们在使用Java进行网络编程时经常会遇到很多超时的概念,比如一个浏览器请求过程就可能会产生很多超时的地方,当我们在浏览器发起一个请求后,网络socket读写可能会超时,web服务器响应可能会超时,数据库查询可能会超时。而对于Java并发来说,与超时相关的内容主要是线程等待超时和获取锁超时,比如调用Object.wait(long)就会使线程进入等待状并在指定时间后等待超时。此篇主要讲解Java内置锁的获取操作的超时机制。当大量线程对某一锁竞争时可能导致某些线程在很长一段时间都获取不了锁,在
2020-12-27 17:37:34 262 1
原创 Java 并发编程:AQS 的自旋锁
互斥锁在AQS的互斥锁与共享锁中已经做了详细介绍,一个锁一次只能由一个线程持有,其它线程则无法获得,除非已持有锁的线程释放了该锁。这里为什么提互斥锁呢?其实互斥锁和自旋锁都是实现同步的方案,最终实现的效果都是相同的,但它们对未获得锁的线程的处理方式却是不同的。对于互斥锁,当某个线程占有锁后,另外一个线程将进入阻塞状态。与互斥锁类似,自旋锁保证了公共数据在任意时刻最多只能由一条线程获取使用,不同的是在获取锁失败后自旋锁会采取自旋的处理方式。自旋锁自旋锁是一种非阻塞锁,它的核心机制就在自旋两
2020-12-24 16:38:13 535 3
原创 Java 并发编程:AQS 的互斥锁与共享锁
我们知道现代机器处理器几乎都是多核多线程的,引入多核多线程机制是为了尽可能提升机器整体处理性能。但是多核多线程也会带来很多并发问题,其中很重要的一个问题是数据竞争,数据竞争即多个线程同时访问共享数据而导致了数据冲突(不正确)。数据竞争如果没处理好则意味着整个业务逻辑可能出错,所以在高并发环境中我们要特别注意这点。数据竞争产生的条件存在数据竞争的场景必须满足以下几个条件:多个线程对某个共享数据进行访问。 这些线程同时地进行访问。 访问即是读或写数据操作。 至少有一个线程是执行写数据操作。
2020-12-22 11:21:09 348 1
原创 Java 并发编程:AQS 的原子性如何保证
当我们研究AQS框架时(对于AQS不太熟知可以先阅读《什么是JDK内置并发框架AQS》,会发现AbstractQueuedSynchronizer这个类很多地方都使用了CAS操作。在并发实现中CAS操作必须具备原子性,而且是硬件级别的原子性。我们知道Java被隔离在硬件之上,硬件级别的操作明显力不从心。这时为了能够执行操作系统层面的操作,就必须要通过用C++编写的native本地方法来扩展实现。一般可以通过JNI方式实现Java代码调用C++代码Unsafe调用JDK提供了一个类来满足CA
2020-12-21 11:02:21 274 2
原创 Java并发编程:深入理解Synchronized的悲观并发策略
互斥锁我们知道volatile它不足以保证数据同步,那么就必须要引入锁来确保。互斥锁是最常见的同步手段,在并发过程中,当多条线程对同一个共享数据竞争时,它能保证共享数据同一时刻只能被一条线程使用,而其他线程只有等到锁释放后才能重新进行竞争。对于Java开发人员,我们最熟悉的肯定就是用synchronized关键词来完成锁功能。在涉及到多线程并发时,针对某些变量,你应该会毫不犹豫地加上synchronized去保证变量的同步性。关于synchronized在C/C++语言中,我们可以直接使用.
2020-12-17 19:03:30 247 1
原创 Java并发编程:volatile能否保证数据的同步
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。关于存储介质作为Java开发我们都了解Java内存模型,JMM为了提高执行性能引入了工作内存和主存两个概念。在继续讨论之前必须先搞清四种存储介质:寄存器、高级缓存、RAM和ROM。RAM与ROM大家都比较熟悉了,可以看成是我们经常说的内存与硬盘。寄存器属于处理器里面的一部分,而高级缓存cach
2020-12-17 18:08:17 419 1
原创 Java 并发编程:如何防止在线程阻塞与唤醒时死锁
Java并发编程:多线程如何实现阻塞与唤醒说到suspend与resume组合有死锁倾向,一不小心将导致很多问题,甚至导致整个系统崩溃。接着看另外一种解决方案,我们可以使用以对象为目标的阻塞,即利用Object类的wait()和notify()方法实现线程阻塞。当线程到达监控对象时,通过wait方法会使线程进入到等待队列中。而当其它线程调用notify时则可以使线程重新回到执行队列中,得以继续执行思维不同针对对象的阻塞编程思维需要我们稍微转变下思维,它与面向线程阻塞思维有较大差异。如前面的sus..
2020-12-17 00:31:26 341 1
原创 Java 并发编程:多线程如何实现阻塞与唤醒
线程的阻塞和唤醒在多线程并发过程中是一个关键点,当线程数量达到很大的数量级时,并发可能带来很多隐蔽的问题。如何正确暂停一个线程,暂停后又如何在一个要求的时间点恢复,这些都需要仔细考虑的细节。Java为我们提供了多种API来对线程进行阻塞和唤醒操作,比如suspend与resume、sleep、wait与notify以及park与unpark等等。睡眠控制线程阻塞与唤醒的最简单方式就是sleep了,Java通过sleep(n)方法能让线程进入到阻塞等待状态,直到休眠时间达到指定值后自动唤醒
2020-12-16 00:35:00 364 1
原创 Java 并发编程:任务执行器 Executor 接口
任务执行器(Executor)是一个接口,位于java.util.concurrent包下,它的作用主要是为我们提供任务与执行机制(包括线程使用和调度细节)之间的解耦。比如我们定义了一个任务,我们是通过线程池来执行该任务,还是直接创线程来执行该任务呢?通过Executor就能为任务提供不同的执行机制。执行器的实现方式各种各样,常见的包括同步执行器、一对一执行器、线程池执行器、串行执行器等等。下面我们将分别介绍这四种执行器,以帮助我们来理解执行器概念。同步执行器同步执行器是最简单的执行器,提交给它的.
2020-12-15 11:33:16 318 1
原创 Java 并发编程:多线程并发内存模型
多任务处理在现代计算机操作系统中几乎已是一项必备的功能了。在许多情况下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。如果不希望处理器在大部分时间里都处于等待其他资源的状态,就必须使用一些手段去把处理器的运算能力“压榨”出来,否则就会造成很大的浪费,而让计算机同时处理几项任务则是最容易想到、也被证明是非常有效的“压榨”手段关于可见性在多核多线程环境中.
2020-12-14 10:25:47 297 1
原创 Java并发编程:并发中死锁的形成条件及处理
死锁是一种无限的互相等待的状态,两个或两个以上的线程或进程构成一个互相等待的环状。以两个线程为例,线程一持有A锁同时在等待B锁,而线程二持有B锁同时在等待A锁,这就导致两个线程互相等待无法往下执行。现实生活中一个经典的死锁情形就是四辆汽车通过没有红绿灯的十字路口,假如四辆车同时到达中心的,那么它们将形成一个死锁状态。每辆车拥有自己车道上的使用权,但同时也在等另外一辆汽车让出另外一条道的使用权死锁的例子该例子中一共有lock1和lock2两个锁。线程一启动后先尝试获取lock1锁,成功获取lock
2020-12-13 12:54:43 280 1
原创 Java并发编程:Java 序列化的工作机制
JDK内置同步器的实现类经常会看到java.io.Serializable接口,这个接口即是Java序列化操作,这样看来序列化也是同步器的一种机制。关于序列化本文主要分析Java中的序列化机制,并看看AQS同步器的序列化,掌握序列化机制才能完整理解JDK内置的同步工具的实现。在程序中为了能直接以Java对象的形式进行保存,然后再重新得到该Java对象,我们需要序列化能力。序列化其实可以看成是一种机制,即按照一定的格式将Java对象的状态转成介质可接受的形式,以方便存储或传输。Java中进行序列.
2020-12-11 17:03:56 192 1
原创 Java并发编程:进程、线程、并行与并发
一谈到Java并发编程,我们一般就会联想起进程、线程、并行、并发等等概念。那么这些概念都代表什么呢?进程与线程有什么关系?并发与并行又是什么关系呢?进程与线程进程是指程序的一次动态执行过程,通常我们说计算机中正在执行的程序就是进程,每个程序都会对应着一个进程。一个进程包含了从代码加载到执行完成的一个完整过程,它是操作系统资源分配最小单元。而线程则是比进程更小的执行单位,是CPU调度和分派的基本单位。每个进程至少有一个线程,反过来一个线程只能属于一个进程,线程可以对进程所有的资源进行调度和运算。.
2020-12-09 22:09:52 308 1
原创 Redis 持久化方式 -RDB
针对Redis的话题估计有些读者已经开始反感了,昨天还是有一些读者困惑,这就具体讲述下Redis持久化方式-RDB的实现方式~触发时机手动触发: save: 阻塞当前 Redis 服务器, 直到 RDB 过程完成为止, 对于内存比较大的实例会造成长时间阻塞, 线上环境不建议使用 bgsave: Redis 进程执行 fork 操作创建子进程, RDB 持久化过程由子进程负责, 完成后自动结束。阻塞只发生在 fork 阶段, 一般时间很短 自动触发 RDB 的持久化机制, .
2020-12-08 22:49:06 202 1
原创 Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
PO(persistant object) 持久对象在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了。通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的 java 对象。最简单的 PO 就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合。 PO 中应该不包含任何对数据库的操作。DO(Domain Object)领域对象就是从现实世界中抽象出来的有形或无形的业务实体。一般和数据中的表结构对应。TO(Tran
2020-12-03 09:56:36 283 1
原创 领域驱动设计的基础知识总结
1. 什么是领域(Domain)我们所做的软件系统的目的都是来解决一系列问题,例如做一个电商系统来在线销售自己企业的产品;做一个灰度发布平台来提升服务的质量和稳定性。任何一个系统都会属于某个特定的领域,例如:论坛是一个领域:要做一个论坛,那这个论坛的核心业务是确定的:比如用户发帖、回帖等核心基本功能; 电商系统是一个领域:只要是电商领域的系统,那核心业务就是:商品浏览、购物车、下单、减库存、付款交易等核心环节;同一个领域的系统都具有相同的核心业务,因为他们要解决的问题的本质是类似的。因此可以推断
2020-12-03 09:47:19 332 1
原创 浅谈我对DDD领域驱动设计的理解
从遇到问题开始当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决。比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品。所以,自然而然就想到要做一个普通电商系统,用于实现在线销售自己企业产品的目的。再比如,我是一家互联网公司,公司有很多系统对外提供服务,面向很多客户端设备。但是最近由于各种原因,导致服务经常出故障。所以,我们希望通过各种措施提高服务的质量和稳定性。其中的一个措施就是希望能做一个灰度发布的平台,这个平台可
2020-12-03 09:45:16 481 1
原创 架构之重构的12条军规!送给自己的礼物~
对于开发者来说,架构设计是软件研发过程中最重要的一环,所谓没有图纸,就建不了房子。在遍地 App 的互联网时代,架构设计有了一些比较成熟的模式,开发者和架构师也可以经常借鉴。但是,随着应用的不断发展,最初的架构往往面临着各种问题,比如无法满足客户的需求、无法实现应用的扩展、无法实现新的特性等等。在这种情况下,我们如何避免一些坑,尽量比较成功地实现架构的重构,是很多开发者和架构师亟需解决的问题。在这里,跟大家分享一下 Uber 的工程主管 Raffi Krikorian 的 12 条规则,并附上.
2020-12-01 14:35:18 198 1
翻译 关于架构优化和设计,架构师必须知道的事情
概述你可以叫它 SOA 的新玩法、微服务、或者任意其它酷炫的名字。近几年来随着互联网的飞速发展,新的架构实践方式不断涌现,但是有一件事情是永恒不变的,那就是-“架构之道”;关于如何设计出灵活、高可用性以及能够快速适应变化的系统架构,我们依旧还有很大的发挥空间。本文会介绍关于如何构建前沿的、易维护的、安全的架构的几个要点,同时你也可以把它当作系统设计的准则或者用它来验证现有的架构是否合理。就像我们经常所说的:没有最好的架构,只有最合适的架构。一个好的架构师,可以根据具体的需求、所拥有的资源等因素综合考
2020-12-01 14:23:31 443 1
微信小程序源码.zip
2020-08-13
ELK(ElasticSearch, Logstash, Kibana)
2018-01-10
kafka_2.10-0.8.2.0
2018-01-02
Advanced Rest Client 4.0
2016-06-13
Java源码 SpringMVC Mybatis Shiro Bootstrap Rest Webservice
2016-06-07
Linux系统 安装Nginx 所需包
2016-01-20
阿里巴巴-Java开发手册(嵩山版) .pdf
2021-03-11
阿里巴巴-Java 开发手册(泰山版).pdf
2021-03-11
Java 开发手册-华山版(阿里).pdf
2021-03-09
IntelliJ Idea for Mac 默认快捷键布局中文版
2020-11-03
微信小程序源码-合集4.rar
2020-09-04
算法图解(高清版).rar
2019-07-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人