Ervin

真正的强者是认清了生活的本质,并且去热爱他的人。


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

Java线程池实现原理(一)

发表于 2020-05-13 | 分类于 技术
字数统计: 1.4k | 阅读时长 ≈ 4

背景

线程池是什么

线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,或者涉及到一些复杂线程操作需要重复开启线程。线程过多会带来额外的开销,包括创建线程的开销,调度线程的开销等等,同时也降低了计算机的整体性能。
线程池能维护多个线程,等待监督管理分配可并发执行的任务,这种做法一方面避免了处理任务时创建销毁线程开销的代价,另一方面也避免了线程数量膨胀的过分调度问题,保证了对内核的充分利用。
Java中对线程池的实现都是基于ThreadPoolExcutor类,它能带来一系列的好处:

  • 降低资源消耗: 通过池化技术重复利用已经创建的线程,降低线程创建和销毁造成的损耗
  • 提高响应速度: 任务到达时,无需等待线程创建就可以立即执行(前提是线程池中有可用的线程)
  • 提高线程的可管理性: 线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会因为线程的不合理分布导致资源调度失衡,降低系统的稳定性。使用线程池可以进行统一的分配、调优和监控。不用开发者自己去维护这一整个流程。
  • 提供更多更强大的功能: 线程池具备可拓展性,允许开发人员向其中增加更多的功能。比如延时定时线程池ScheduledThreadPoolExecutor,就允许任务延期执行或定期执行。
阅读全文 »

JavaGuide之AQS

发表于 2020-05-12 | 分类于 技术
字数统计: 9.6k | 阅读时长 ≈ 38

文章转载:一行一行源码分析清楚 AbstractQueuedSynchronizer (二)

文章比较长,信息量比较大,建议在 pc 上阅读。文章标题是为了呼应前文,其实可以单独成文的,主要是希望读者看文章能系统看。

本文关注以下几点内容:

  1. 深入理解 ReentrantLock 公平锁和非公平锁的区别
  2. 深入分析 AbstractQueuedSynchronizer 中的 ConditionObject
  3. 深入理解 Java 线程中断和 InterruptedException 异常

基本上本文把以上几点都说清楚了,我假设读者看过上一篇文章中对 AbstractQueuedSynchronizer 的介绍 ,当然如果你已经熟悉 AQS 中的独占锁了,那也可以直接看这篇。各小节之间基本上没什么关系,大家可以只关注自己感兴趣的部分。

其实这篇文章的信息量很大,初学者估计至少要 1 小时才能看完,希望本文对得起大家的时间。

阅读全文 »

Spring boot之事务

发表于 2020-03-03 | 分类于 技术
字数统计: 958 | 阅读时长 ≈ 3

Spring的事务机制

所有的数据库访问技术都有事务处理机制,这些技术提供了API用于开启事务,提交事务完成数据操作,或者在发生错误的时候回滚数据。Spring的事务机制是用统一的机制来处理不同数据访问技术的事务处理,Spirng的事务机制提供了一个PlatformTransactionManager接口,不同的数据访问技术的事务使用不同的接口实现,如下表:

数据访问技术 实现
JDBC DataSourceTransactionManager
JPA JPATransactionManager
Hibernate HibernateTransactionManager
JDO JdoTransactionManager
阅读全文 »

Spring boot之事务传播

发表于 2020-02-25 | 分类于 技术
字数统计: 241 | 阅读时长 ≈ 1

背景

Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为,这是Spring为我们提供的强大工具箱。使用事务传播可以为我们开发提供许多便利。但是人们对他的误解也很多,你一定听过“service方法事务最好不要嵌套”的传言。要想正确使用工具首先需要了解工具。

基础概念

什么是事务传播行为

事务传播行为用来描述由某一个事务传播行为修饰的方法被嵌套进另外一个方法时事务如何传播。
伪代码说明:

1
2
3
4
5
6
7
8
9
public void methodA(){
methodB();
//doSomething
}

@Transaction(Propagation == XX)
public void methodB(){
//doSomething
}

代码中methodA()方法嵌套调用了methodB()方法,methodB()的事务传播行为由@Transaction()设置来决定。

Spring boot之JPA

发表于 2020-01-21 | 分类于 技术
字数统计: 1.7k | 阅读时长 ≈ 7

Spring boot连接数据库背景知识

  • JDBC
    Java DataBase Connectivity是Java连接数据操作的原生接口。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为各个数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准的方法。

    一句话概括:JDBC是所有框架操作数据库必须要用的,有数据库厂商提供,但是为了方便JAVA程序员调用各个数据库,各个数据库厂商都要实现JDBC接口(提供统一的标准)

  • JPA
    JAVA Persistence API是JAVA持久化规范,是ORM框架的标准(注意,它是一种标准),主流ORM框架都实现了这个标准。Sun引入新的JPA ORM规范出于两个原因:其一,简化现有的JAVA EE和JAVA SE应用开发工作;第二,Sun希望整合ORM技术,实现统一化操作。ORM是一种思想,是插入在应用程序与JDBC API之间的一个中间层,JDBC并不能很好地支持面向对象的程序设计,ORM解决了这个问题,通过JDBC将字段高效地与对象进行映射,具体实现(ORM框架)有:hibernate,toppling,spring data jpa,open jpa等。spring data jpa是对JPA规范的再次抽象,底层还是用的实现JPA的hibernate技术。本文讲的JPA就是其具体实现:Spring data jpa。
  • hibernate
    一个标准的ORM框架,实现了JPA接口
  • mybatis
    一个持久化框架,但是不完全是一个ORM框架,不是依照JPA规范。
阅读全文 »

CSS布局之Position(定位)

发表于 2020-01-15 | 分类于 技术
字数统计: 557 | 阅读时长 ≈ 2

CSS重点属性之Position

position属性指定了元素的定位类型,它有5个值

  • static(默认)
  • relative
  • fixed
  • absolute
  • sticky

元素可以使用的top / bottom / left / right的属性进行定位。然而,这些属性无法正常工作,除非先设定position属性。他们也有不同的工作方式,这取决于定位方法。

阅读全文 »

CSS布局之Flex布局

发表于 2020-01-08 | 分类于 技术
字数统计: 1.6k | 阅读时长 ≈ 6

Flex布局

文章来源

前面讲过CSS基本的布局方法,默认排列位inline(行内元素)和block(块状元素),传统的布局解决方案,基于盒装模型,依赖display属性+position属性+float属性。它对于那些特殊布局非常不方便,09年,W3C提出了一种新的方案–Flex布局,可以简便完整响应式实现各种页面布局。目前已经得到了所有浏览器的支持,小程序也是支持Flex的。

阅读全文 »

SpringBoot初解

发表于 2019-12-25 | 分类于 技术
字数统计: 954 | 阅读时长 ≈ 3

SpringBoot是什么

从本质上来说,Springboot是一个专注于框架的框架。Spring Boot就是对各种框架的整合,让他们集成在一起更加简单。目前ssm框架还是比较常用的,其中ss指的无非就是Spring和SpringMVC,我们可以简单的认为“Spring Boot >= Spring + SpringMVC”。Spring Boot的配置极其简单,可以让你不用或者只需要很少的配置就可以快速运行项目。

阅读全文 »

JS事件循环

发表于 2019-12-16 | 分类于 技术
字数统计: 2.2k | 阅读时长 ≈ 8

最近在看js事件循环,事件循环是js运行的核心,js是单线程的,js的异步事件就是依赖于事件循环机制,这里进行总结一下。

事件循环

首先,我们来解释下事件循环是什么东西:就我们所知道的,浏览器的js是单线程的,也就是说,在同一时刻,最多有且只有一个代码段在执行,可是浏览器又能很好的处理异步请求,这是为什么呢?

阅读全文 »

日本游记(三)

发表于 2019-07-18 | 分类于 文章
字数统计: 9 | 阅读时长 ≈ 1
私有文章, 请输入密码查看。
阅读全文 »
1…345…8
Ervin Zhang

Ervin Zhang

stay hungry, stay foolish

75 日志
3 分类
47 标签
RSS
GitHub E-Mail Twitter
© 2025 Ervin Zhang | Site words total count: 94.5k
本站访客数:次 |
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4