01 2021 档案
摘要:什么是死锁 死锁问题是多线程特有的问题,它可以被认为是线程间切换消耗系统性能的一种极端情况。 在死锁时,线程间相互等待资源,而又不释放自身的资源,导致无穷无尽的等待,其结果是系统任务永远无法执行完成。 死锁问题是在多线程开发中应该坚决避免和杜绝的问题. 死锁示例代码 package com.rume
阅读全文
摘要:概述 CountDownLatch 允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。简单来说,就是 CountDownLatch 内部维护了一个计数器,每个线程完成自己的操作之后都会将计数器减一,然后会在计数器的值变为 0 之前一直阻塞,直到计数器的值变为 0. 简单使用 这个例
阅读全文
摘要:什么是CAS CAS(compare and swap),字面意思比较并交换,是解决多线程并行情况下使用锁造成性能损耗的一种机制. public final boolean compareAndSet(int expect, int update) { return unsafe.compareAn
阅读全文
摘要:ExecutorService 介绍 ExecutorService是java线程池定义的一个接口,它在java.util.concurrent包中,在这个接口中定义了和后台任务执行相关的方法。 Java API对ExecutorService接口实现有两个,所以这两个即是线程池的具体实现。 1.
阅读全文
摘要:继承关系 Executor接口 public interface Executor { void execute(Runnable command); } ExecutorService接口 public interface ExecutorService extends Executor { vo
阅读全文
摘要:初始化线程池后,把任务丢进去,等待调度就可以了,使用起来比较方便。 JAVA中Thread是线程类,不建议直接使用Thread执行任务,在并发数量比较多的情况下,每个线程都是执行一个很短的时间就任务结束了,这样频繁创建线程会大大降低系统的效率,因为频繁的创建和销毁线程需要时间。而线程池可以复用,就是
阅读全文
摘要:DelayQueue DelayQueue是一个无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的Delayed元素。 存放到DelayDeque的元素必须继承Delayed接口。Delayed接口使对象成为延迟对象,它使存放在DelayQueue类中的对象具有了
阅读全文
摘要:ArrayBlockingQueue 有界的阻塞队列,内部是一个数组,有边界的意思是:容量是有限的,必须进行初始化,指定它的容量大小,以先进先出的方式存储数据,最新插入的在对尾,最先移除的对象在头部。 public class ArrayBlockingQueue<E> extends Abstra
阅读全文
摘要:简介 多线程中通过队列很容易共享数据,比如经典的生产者和消费者模型中,通过队列可以很方便的实现数据共享。假设我们有若干生产者线程,又有若干消费者线程,生产者线程可以通过队列将数据共享给消费者。但是生产者和消费者在某个时间段内,万一发生数据处理速度不匹配的情况呢?如果生产者生产数据的速度远大于消费者消
阅读全文
摘要:Fork/Join框架中两个核心类ForkJoinTask与ForkJoinPool,声明ForkJoinTask后,将其加入ForkJoinPool中,并返回一个Future对象。 ForkJoinPool:ForkJoinTask需要通过ForkJoinPool来执行,任务分割的子任务会添加到当
阅读全文
摘要:Fork/join介绍 Fork/join框架是java7提供的并行执行任务的框架,是把大任务分割成若干小任务,最后汇总若干小任务的执行结果得到最终的结果。它的思想与MapReduce类似。Fork把一个大任务分割成若干小任务,Join用于合并小任务的结果,最后得到大框架的结果。主要采取工作窃取算法
阅读全文
摘要:Java同步组件概况 CountDownLatch : 是闭锁,通过一个计数来保证线程是否一直阻塞 Semaphore: 控制同一时间,并发线程数量 CyclicBarrier:字面意思是回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。 ReentrantLock:是一个重入锁,
阅读全文
摘要:lastlog 打印系统账号最近一次的登录记录情况,解析的是/var/log/lastlog文件,它是一个data file类型的文件,文本模式打开无法正常显示。 Username Port From Latest root pts/0 171.83.37.215 Sat Jan 9 17:23:5
阅读全文
摘要:Java同步组件概况 CountDownLatch : 是闭锁,通过一个计数来保证线程是否一直阻塞 Semaphore: 控制同一时间,并发线程数量 CyclicBarrier:字面意思是回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。 ReentrantLock:是一个重入锁,
阅读全文
摘要:先说区别 last,重写后的规则,会继续用重写后的值去匹配下面的location。 break,重写后的规则,不会去匹配下面的location。使用新的规则,直接发起一次http请求了。 Nginx 配置文件 server { listen 88; server_name _; location /
阅读全文
摘要:Java同步组件概况 CountDownLatch : 是闭锁,通过一个计数来保证线程是否一直阻塞 Semaphore: 控制同一时间,并发线程数量 CyclicBarrier:字面意思是回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。 ReentrantLock:是一个重入锁,
阅读全文
摘要:同步队列结构 AQS使用的同步队列是基于一种CLH锁算法来实现。 CLH锁也是一种基于链表的可扩展、高性能、公平的自旋锁,申请线程只在本地变量上自旋,它不断轮询前驱的状态,如果发现前驱释放了锁就结束自旋. 同步器中包含了两个节点类型的引用,一个指向头节点(head),一个指向尾节点(tail),没有
阅读全文
摘要:J.U.C 之 AQS AbStractQueuedSynchronizer类,简称AQS,是一个来构建锁和同步器的框架,JDK1.5开始引入了J.U.C,大大提高了JAVA程序的并发性,而AQS则是J.U.C的核心,是并发类中的核心部分,他是一个基于FIFO队列,这个队列可以构建锁或其它相关的同步
阅读全文
摘要:J.U.C是java.util.concurrent的简写,里面提供了很多线程安全的集合。 CopyOnWriteArrayList介绍 CopyOnWriteArrayList相比于ArrayList是线程安全的,字面意思是写操作时复制。CopyOnWriteArrayList使用写操作时复制技术
阅读全文
摘要:ArrayList,HashSet,HashMap都是线程非安全的,在多线程环境下,会导致线程安全问题,所以在使用的时候需要进行同步,这无疑增加了程序开发的难度。所以JAVA提供了同步容器。 同步容器 ArrayList > Vector,Stack HashMap > HashTable(key,
阅读全文
摘要:SimpleDateFormat线程不安全的日期格式化库 SimpleDateFormat是JAVA提供的一个日期转换类。 package com.rumenz.task; import java.text.SimpleDateFormat; import java.util.concurrent.
阅读全文
摘要:StringBuilder package com.keytech.task; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.conc
阅读全文