0%

一、为什么要使用线程池

线程池复用线程有以下几点优点:

  • 减少资源创建 => 减少内存开销,创建线程占用内存。使用 new Thread 每次启动线程都需要进行对象和线程;
  • 降低系统开销 => 创建线程需要时间,会延迟处理的请求;
  • 提高稳定稳定性 => 避免无限创建线程引起的 OOM;
  • 功能更强大 => 提供了定期执行、线程中断、并发数控制等功能。

二、Executors 创建线程池的方式

根据返回的对象类型创建线程池可以分为三类:

Read more »

J.U.C 是 java.util.concurrent 的缩写,是 jdk 的并发包,包含了很多并发相关的类。下面介绍常用的类。

一、Atomic 原子操作类

1. 原子更新基本类型

使用原子的方式更新基本类型,Atomic 包提供了以下 3 个类:

  • AtomicBoolean
  • AtomicInteger
  • AtomicLong

以上类的基本使用方法都差不多,下面以 AtomicInteger 为例子说明。AtomicInteger 常用方法如下:

  • int addAndGet(int delta) : 以原子方式将输入值与实例中的值相加,并返回结果;
  • int getAndAdd(int delta)
  • int incrementAndGet()
  • boolean compareAndSet(int expect, int update) : 如果输入值等于预期值,则以原子的方式将该值设置为输入的值;
Read more »

一、线程安全

1. 线程安全

可以简单的理解为:一个方法或者一个实例可以在多线程环境中使用而不会出现问题。

2. 线程不安全的原因

多个线程使用了相同的资源,如同一内存区(变量、数组或对象)、系统(数据库、web服务等)或文件等。更准确的说,是多个线程对同一资源进行了写操作。多个线程只读取相同的资源,是没有线程安全问题的。

3. 如何保证线程安全

保证共享内存的原子性、可见性和有序性。

Read more »

一、 基本概念

并发:一个处理器处理多个任务,逻辑上的同时发生。

并行:多个处理器同时处理多个任务,物理上的同时发生。

并发与并行的区别
Read more »

又一次整理了自己的博客,希望是次新的开始,坚持总结一些优质内容,算是对自己工作和学习的输出吧。

Demo

QuartzSample.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class QuartzSample {
public static void main(String[] args) throws SchedulerException {
StdSchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler = sf.getScheduler();
scheduler.start();

JobDetail job = JobBuilder
.newJob(SampleJob.class)
.withIdentity("job01", "group01")
.build();

String cron = "0 00 10 * * ?";
CronTrigger cronTrigger = TriggerBuilder
.newTrigger()
.withIdentity("cronTrigger")
.forJob("job01", "group01")
.withSchedule(CronScheduleBuilder.cronSchedule(cron))
.startNow()
.build();

scheduler.scheduleJob(job, cronTrigger);
}
}
Read more »