自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 JAVA线程池简介

一、线程池的优势1.节约系统资源。我们知道线程的创建和销毁都是要耗费系统资源的,我们利用线程池可以重复利用线程,避免了线程的过多创建和消耗。2.减少用户响应时间。我们执行一个任务,一般要经过线程创建、任务执行、线程销毁三个步骤,每个步骤都是要消耗时间的,我们用线程池可以节约创建和销毁时间,从而减少用户响应时间3.便于管理线程。我们知道线程属于系统的稀缺资源,如果因为编写代码的问题,无限创建线程,会大量消耗系统资源,甚至系统崩溃。市容线程池可以统一管理线程的创建和销毁,便于监控、调优。二、线程核心类T

2020-06-15 21:00:15 219

原创 HashMap分析(1.8为主)

一、为什么要用HashMap1.顺序表(数组、ArrayList):一片物理上连续的大小确定的存储空间,可以快速定位,查找方便,做删除和新增慢(增加和删除要大量移动元素)2.链表:空间上不连续,逻辑上连续,删除和新增快,查找慢(查找要轮询)所以HashMap就应运而生,取上面2个数据结构的优势二、什么是HashMapHashMap是Map的一个实现类,根据键的hashCode值存储数据,即存的是key、value的键值对,可以快速定位。只允许一个key为空,允许多个value为空。是线程不安全的

2020-06-09 16:06:51 195

原创 JAVA并发编程梳理与学习七(AQS)

一、AQS(AbstractQueuedSynchronizer)定义及作用同步队列器,可以用来构建锁或者其他同步组件,它使用volatitle定义了一个int型的同步变量表示同步状态,通过内置的FIFO队列来完成竞争资源线程的调度工作。这个是并发大神Doug Lea设计的二、AQS使用思路我们看AbstractQueuedSynchronizer方法,它是一个抽象类,自己本身并没有实现任何同步方法,里面只是定义了一些获取、改变同步状态来给自定义开发同步组件的开发者使用,既可以实现独占式锁(ReenT

2020-06-01 09:59:28 188

原创 JAVA并发编程梳理与学习六(Lock和Condition 接口)

一、Lock被称为显示锁。既然已经有synchronized为什么还要定义Lock呢?使用过synchronized关键字获取锁的都知道,synchronized获取锁和释放锁太死板,有以下缺点。一旦一个线程用synchronized获取锁,别的竞争锁的线程都要处于等待状态,除非该线程执行完锁定代码或者线程抛出异常释放锁,别的等待线程才有重新竞争锁的机会。所以会出现下面问题:一旦拿到锁的线程,如果由于线程调用不释放锁的阻塞方法或者该线程要处理的业务耗时较长,那么其他线程只能处于等待状态,这样会影响程序

2020-05-29 12:58:13 170

原创 JAVA并发编程梳理与学习五(原子操作CAS)

一、原子操作1.什么是原子操作?一个操作一旦开启就不会被打断,一直到操作完成。类似于事务,要么不执行,要执行就执行完,再去执行别的任务。2.如何实现原子操作(1)

2020-05-27 15:17:48 124

原创 JAVA并发编程梳理与学习四(CountDownLatch和CyclicBarrier)

一、CountDownLatch1.闭锁。CountDownLatch可以等其他线程完成一些工作后再执行。例如,应用主线程再等框架里面的其他线程加载完一些东西后,再执行就可以使用CountDownLatch2.CountDownLatch是通过一个计数器实现的,计数器初始值为初始任务数量。每当完成一个任务后,计数器减1(需要调CountDownLatch.countDown()方法),当计数器减为0后,表示所有任务已经完成,然后再闭锁上等待await()方法的线程就会被唤醒,继续执行**3.注意:**

2020-05-25 21:13:29 133

原创 JAVA并发编程梳理与学习三(ForkJoin)

一、ForkJoin说明ForkJoin是jdk1.7增加的并发工具类,可以解决分而治之的问题,就是把一个任务分为若干小任务,并发的去处理,最后再把处理结果合并起来,从而达到提高速度的目的。使用时要保证每个小任务互不干扰、相互独立且结构和主任务相同,用递归的方法解决这些小任务,最终合并到一起二、ForkJoin使用1.首先创建ForkJoinPool,ForkJoinPool可以理解为一个线程池,里面维护的线程数一般为cpu核数,不断的执行拆分的任务,并且还会工作窃取,就是自己的活要是干完了空闲了,

2020-05-25 19:39:26 157

原创 JAVA并发编程梳理与学习二(线程之间的共享和协作)

七、理解run和start方法先看start源码我们创建线程时,会先new一个线程对象,然后通过start方法来和操作系统交互,所以start是启动一个线程。而run方法一般写业务逻辑,只是一个java方法,在哪个线程调用就是实现哪个线程业务逻辑。八、线程生命周期...

2020-05-19 12:44:12 324

原创 JAVA并发编程梳理与学习一(线程基础概念解读)

引言:编程3年多了,感到自己知识体系零散,把自己知识体系梳理和学习一下,每个体系都由入门–》初步应用–》高阶–》源码分析组成欢迎大家提意见

2020-05-18 11:36:30 730

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除