51
Dev开发社区
首页
文章
问答
工具
搜索
登录
注册
#包笔记
笔记——Springboot response、ServletOutputStream、图形验证码显示慢
今天遇到一个图形验证码加载很慢的问题,大概耗时有200~500毫秒左右。根据追踪,图形验证码图片生成耗时0~1毫秒,而response.getOutputStream.write()将图片写入前台页面的时候响应很慢,耗费了200~500毫秒。最后经过排除发现,只要不动httpsession,响应正常很快,耗时5~30毫...
代码星球
·
2021-02-12
笔记
Springboot
response
ServletOutputStream
图形
并发编程学习笔记(15)----Executor框架的使用
Executor执行已提交的 Runnable 任务的对象。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。通常使用 Executor 而不是显式地创建线程。例如,可能会使用以下方法,而不是为一组任务中的每个任务调用 ne...
代码星球
·
2021-02-12
并发
编程
学习
笔记
----Executor
并发编程学习笔记(14)----ThreadPoolExecutor(线程池)的使用及原理
与jdbc连接池类似,在创建线程池或销毁线程时,会消耗大量的系统资源,因此在java中提出了线程池的概念,预先创建好固定数量的线程,当有任务需要线程去执行时,不用再去新创建线程,而是从线程池中获取线程去执行任务,任务执行完成后将线程重新归还到线程池,这样的一个池就叫做线程池。第一:降低资源消耗。通过重复利用已创...
代码星球
·
2021-02-12
并发
编程
学习
笔记
----ThreadPoolExecutor
并发编程学习笔记(13)----ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)原理
· 在并发编程中,我们有时候会需要使用到线程安全的队列,而在Java中如果我们需要实现队列可以有两种方式,一种是阻塞式队列。另一种是非阻塞式的队列,阻塞式队列采用锁来实现,而非阻塞式队列则是采用cas算法来保证线程安全的,接下来就让我们来看一下jdk中两种队列的实现方式。 顾名思义,这是一个基于链表结构的队列,它是...
代码星球
·
2021-02-12
阻塞
队列
并发
编程
学习
并发编程学习笔记(12)----Fork/Join框架
Fork指的是将系统进程分成多个执行分支(线程),Join即是等待,当fork()方法创建了多个线程之后,需要等待这些分支执行完毕之后,才能得到最终的结果,因此join就表示等待。在实际的使用中,如果毫无顾忌的使用fork()来开启线程,可能会由于线程过多而影响系统性能,因此在jdk中提供了ForkJoinPool...
代码星球
·
2021-02-12
并发
编程
学习
笔记
----Fork
并发编程学习笔记(11)----FutureTask的使用及实现
Future模式解决的问题是。在实际的运用场景中,可能某一个任务执行起来非常耗时,如果我们线程一直等着该任务执行完成再去执行其他的代码,就会损耗很大的性能,而Future接口就是Future的实现,它可以让当前线程将任务交给Future去执行,然后当前线程就可以去干别的事,知道耗时任务执行完成之后,当前线程直接获取...
代码星球
·
2021-02-12
并发
编程
学习
笔记
----FutureTask
并发编程学习笔记(10)----并发工具类CyclicBarrier、Semaphore和Exchanger类的使用和原理
在jdk中,为并发编程提供了CyclicBarrier(栅栏),CountDownLatch(闭锁),Semaphore(信号量),Exchanger(数据交换)等工具类,我们在前面的学习中已经学习并分析了CountDownLatch工具类的使用方式和源码实现,接下来我们继续学习CyclicBarrier,Semaph...
代码星球
·
2021-02-12
并发
编程
学习
笔记
----
并发编程学习笔记(9)----AQS的共享模式源码分析及CountDownLatch使用及原理
前面已经说过了AQS的原理及独享模式的源码分析,今天就来学习共享模式下的AQS的几个接口的源码。 首先还是从顶级接口acquireShared()方法入手:publicfinalvoidacquireShared(intarg){if(tryAcquireShared(arg)<0)doAcquireSha...
代码星球
·
2021-02-12
并发
编程
学习
笔记
----AQS
并发编程学习笔记(8)----ThreadLocal的使用及源码分析
ThreadLocal,顾名思义,就是线程的本地变量,ThreadLocal会为每个线程创建一个本地变量副本,使得使用ThreadLocal管理的变量在多线程的环境下,每个线程都是访问的是自己内部的副本变量,将全局变量局部化,跟局部变量一样的使用,从而避免了一些线程安全的问题。比如在数据库连接池中获取的连接时,此时...
代码星球
·
2021-02-12
并发
编程
学习
笔记
----ThreadLocal
并发编程学习笔记(7)----线程之间的通信
前面所有的线程都是独立运行的,几个线程之间只会存在竞争锁和资源的管理,但是在多线程的环境下可能会需要多个线程同时协作完成,当某个线程执行一定操作之后,需要其他线程的帮助才能执行完成,此时该线程该如何去通知其他线程执行任务,当其他线程执行时该线程又处于什么状态,当其他线程执行完成后,又该如何使当前线程执行。这就是我们...
代码星球
·
2021-02-12
并发
编程
学习
笔记
----
并发编程学习笔记(6)----公平锁和ReentrantReadWriteLock使用及原理
(一)公平锁 1、什么是公平锁? 公平锁指的是在某个线程释放锁之后,等待的线程获取锁的策略是以请求获取锁的时间为标准的,即使先请求获取锁的线程先拿到锁。 2、在java中的实现? 在java的并发包中提供了ReentrantLock提供了重入锁并且也提供了公平锁(FairSync)和非公平锁(NonfairSy...
代码星球
·
2021-02-12
并发
编程
学习
笔记
----
并发编程学习笔记(5)----AbstractQueuedSynchronizer(AQS)原理及使用
(一)什么是AQS?阅读java文档可以知道,AbstractQueuedSynchronizer是实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关同步器(信号量、事件,等等)提供一个框架,它是一个依靠单个原子 int 值来表示状态的大多数同步器的一个基础类。在jdk中他的实现的类有Semaph...
代码星球
·
2021-02-12
并发
编程
学习
笔记
----AbstractQueuedSynchronizer
并发编程学习笔记(4)----jdk5中提供的原子类及Lock使用及原理
(1)jdk中原子类的使用:jdk5中提供了很多原子类,它会使变量的操作变成原子性的。原子性:原子性指的是一个操作是不可中断的,即使是在多个线程一起操作的情况下,一个操作一旦开始,就不会被其他线程干扰。jdk中的rt.jar中提供给了很多的原子性操作类。它们是位于java.util.concurrent.atomic包...
代码星球
·
2021-02-12
并发
编程
学习
笔记
----jdk5
并发编程学习笔记(3)----synchronized关键字以及单例模式与线程安全问题
再说synchronized关键字之前,我们首先先小小的了解一个概念-内置锁。什么是内置锁?在java中,每个java对象都可以用作synchronized关键字的锁,这些锁就被称为内置锁,每个对象的锁的信息都存在对象头中所以synchronized关键字在使用过程中之所以能够保证线程的安全,也是因为使用了锁。下面就说...
代码星球
·
2021-02-12
并发
编程
学习
笔记
----synchronized
并发编程学习笔记(2)----使用多线程带来的风险
说到多线程带来的风险,首先要了解一个概念-临界区。 什么是临界区? 临界区是用来表示一种公共的资源(共享数据),它可以被多个线程使用,但是在每次只能有一个线程能够使用它,当临界区资源正在被一个线程使用时,其他的线程就只能等待当前线程执行完之后才能使用该临界区资源。 比如一台饮水机,比如办公室办公室里有...
代码星球
·
2021-02-12
并发
编程
学习
笔记
----
首页
上一页
...
14
15
16
17
18
...
下一页
尾页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他