Dodd

dont be shy, just try!


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 友情链接

  • links

  • 公益404

  • 搜索

centos7安装redis

发表于 2020-03-20 | 分类于 Centos7 | | 阅读次数:

一、安装gcc依赖

由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 。切换到root用户下,执行yum -y install gcc命令:

1
[root@common soft]# yum install -y gcc

二、下载并解压安装包

1
2
[root@common redis]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz
[root@common redis]# tar -zxvf redis-5.0.3.tar.gz
阅读全文 »

nio

发表于 2019-07-14 | 分类于 IO | | 阅读次数:

介绍

Java NIO(New IO / Non Blocking IO),是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的。NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。NIO 与 IO 的主要区别:

IO NIO
面向流(Stream Oriented) 面向缓存区(Buffer Oriented)
阻塞IO(Blocking IO) 非阻塞IO(Non Blocking IO)
(无) 选择器(Selectors)
阅读全文 »

优雅的异步操作

发表于 2019-01-27 | 分类于 并发包 | | 阅读次数:

介绍

阅读全文 »

优雅的使用线程池

发表于 2019-01-27 | 分类于 并发包 | | 阅读次数:

介绍

当在一个应用中需要创建多个线程或者线程池时最好给每个线程或者线程池根据业务类型设置具体的名称,以便在出现问题的时候方便进行定位。

阅读全文 »

Java并发包中线程池ScheduledThreadPoolExecutor原理解析

发表于 2019-01-23 | 分类于 并发包 | | 阅读次数:

介绍

ThreadPoolExecutor是Executors工具类的一部分功能,另一部分是ScheduledThreadPoolExecutor的实现。ScheduledThreadPoolExecutor继承了ThreadPoolExecutor并实现了ScheduledExecutorService接口。线程池队列是DelayedWorkQueue,其和DelayedQueue类似,是一个延迟队列。

阅读全文 »

Java并发包中线程池ThreadPoolExecutor原理解析

发表于 2019-01-16 | 分类于 并发包 | | 阅读次数:

介绍

线程池主要解决两个问题:

  1. 当执行大量异步任务时线程池能够提供较好的性能。线程池中的线程是可以复用的,避免了线程创建和销毁带来的开销;
  2. 线程池提供了一种资源限制和管理的手段,比如可以限制线程的个数,动态新增线程等ThreadPoolExecutor也保留了一些基本你的统计数据,比如当前线程池完成的任务数目等。

线程池提供了许多可调参数和可扩展性接口,以满足不同情境的需要。我们可以使用更方便的Executors的工厂方法,比如newCachedThreadPool(线程池线程个数最多可达Integer.MAX_VALUE,线程自动回收)、newFixedThreadPool(固定大小的线程池)和newSingleThreadExecutor(单个线程)等来创建线程池,用户还可以自定义线程池。

阅读全文 »

Java并发包中线程同步器原理解析

发表于 2019-01-13 | 分类于 并发包 | | 阅读次数:

介绍

在日常开发中经常遇到需要在主线程中开启多个线程去并行执行任务,并且主线程需要等待所有子线程执行完毕后再进行汇总的场景,在CountDownLatch出现之前一直都使用join()方法来实现这一点,但是join 方法不够灵活,不能满足不同场景的需要,比如使用ExecutorService线程池来管理线程时传递的参数是Runable或者Callable对象,这时候就没办法直接调用线程的join方法,而是需要使用CountDownLatch了。

阅读全文 »

并发List源码解析:CopyOnWriteArrayList

发表于 2019-01-12 | 分类于 并发包 | | 阅读次数:

介绍

并发包中的并发List只有CopyOnWriteArrayList,是一个线程安全的ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。

阅读全文 »

JDK8新增原子操作类LongAdder

发表于 2019-01-09 | 分类于 并发包 | | 阅读次数:

介绍

使用AtomicLong时,在高并发下大量线程会同时去竞争更新同一个原子变量,但是由于同时只有一个线程的CAS操作会成功,这就造成了大量线程竞争失败后通过无限循环不断进行自旋尝试CAS的操作,这会浪费CPU资源。

1
2
3
4
5
6
7
8
public final long incrementAndGet() {
for (;;) {
long current = get();
long next = current + 1;
if (compareAndSet(current, next))
return next;
}
}

因此JDK8新增了一个原子性递增或者递减类LongAdder用来克服在高并发下使用AtomicLong的缺点。

阅读全文 »

ThreadLocal

发表于 2019-01-08 | 分类于 并发包 | | 阅读次数:

介绍

ThreadLocal是JDK包提供的,它提供了线程本地变量。创建一个ThreadLocal变量后,每个线程都会复制一个变量到自己的本地内存,当多个线程操作这个变量时,实际操作的是自己本地内存里面的变量,从而避免了线程安全问题。

阅读全文 »
1…345…18
dodd

dodd

不吃狗粮,不喝鸡汤

175 日志
22 分类
26 标签
微博 知乎
Links
  • JavaChen
  • 酷壳
© 2020 dodd
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.3