Java并发编程之CAS和AQS

当对一个共享变量执行操作时,AQS 的实现主要在于维护一个volatile int state(代表共享资源)和一个 FIFO 线程等待队列(多线程争用资源被阻塞时会进入此队列,使用 AQS 来实现一个同步器需要覆盖实现如下几个方法,,抽象队列同步器,是 下提供的一套给予 等待队列的阻塞锁和相关同步器的一个同步框架

Linux之cd命令

关于切换到上一个工作目录的说明,表示切换至指定用户的主目录,返回状态为成功除非无法进入指定的目录,用来切换工作目录

Java线程池ExecutorService中重要的方法

但是会返回所有Callable任务中其中一个任务的执行结果,执行这个方法不会返回Future,invokeAll(…)与 invokeAny(…)类似也是接收一个Callable集合,Callable接口中的call()方法有一个返回值

Linux之ls命令

在命令参数的后面是命令的操作对象,列出目标目录中所有的子目录和文件,如果命令的操作对象位于当前目录中,如果省略命令参数和操作对象

Java线程池ThreadPoolExecutor源码分析

可以通过调用线程池的shutdown或shutdownNow方法来关闭线程池,通常调用shutdown方法来关闭线程池,至于应该调用哪一种方法来关闭线程池,线程池里的线程不会自动销毁

Java并发线程之线程池

maxnumPoolSize 线程池中最大的线程数,是一个非常重要的参数,它表示在线程池中最多能创建多少线程,corePoolSize 核心线程池的大小,在创建了线程池后,默认情况下,线程池中没有任何的线程池,而是等任务过来了再去创建线程执行任务,默认情况下,只有当线程池中的线程数大于 时, 才会起作用,即当线程池中的线程数大于 ,如果一个线程的空闲时间达到 ,则会终止直到线程池中的线程数量不大于,但是如果调用了 方法,在线程池中线程数不大于 时, 参数也会起作用,直到线程池中的线程数为0

Java高并发BlockingQueue重要的实现类二

它使存放在DelayQueue类中的对象具有了激活日期,它是一个特殊的队列交做同步队列,特点是当一个线程往队列里写一个元素,写入操作不会理解返回,需要等待另外一个线程来将这个元素拿走,DelayQueue是一个无界阻塞队列,该队列的头部是延迟期满后保存时间最长的Delayed元素

Java高并发BlockingQueue重要的实现类

基于链表的阻塞队列,通 类似,其内部也维护这一个数据缓冲队列(该队列由一个链表构成),当生产者往队列放入一个数据时,队列会从生产者手上获取数据,并缓存在队列的内部,而生产者立即返回,只有当队列缓冲区到达最大值容量时(LinkedBlockingQueue可以通过构造函数指定该值),才会阻塞队列,直到消费者从队列中消费掉一份数据,生产者会被唤醒,反之对于消费者这端的处理也基于同样的原理,从上面的构造函数中可以看到,这里会初始化一个空的头结点,那么第一个元素入队的时候,队列中就会有两个元素,在生产者放入数据和消费者获取数据,都是共用一个锁对象,由此也意味着两者无法真正并行运行,如果要插入(put)一个元素,需要获取 锁,但是获取了锁还不够,如果队列此时已满,还是需要队列不满(notFull)的这个条件(Condition)

Java高并发之BlockingQueue

当一个线程试图对一个为空的队列进行出队列操作时,也将会被阻塞,除非有一个线程进行了出队列操作,当一个线程试图对一个已经满了的队列进行入队操作时,也将会被阻塞,除非有一个线程进行了出队列操作,的实现都是线程安全的,但是批量的集合操作 , , , 不一定是原子操作,如 添加了一些元素后抛出异常,此时 中已经添加了部分元素,这个是允许的,取决于具体实现,阻塞队列是线程安全的,主要用在生产者消费者的场景上

Java中J.U.C扩展组件之ForkJoinTask和ForkJoinPool

和其它 一样,是工作线程窃取的对象,因此当其中的任务被一个工作线程成功窃取时,也就意味着提交的任务真正开始进入执行阶段,每个工作线程在运行中产生新的任务(通常因为调用了 )时,会放在工作队列的对尾,并且工作线程在处理自己的工作队列时,使用的是 ,也就是说每次从队列尾部取任务来执行,当一个工作线程的队列里暂时没有任务时,它会随机从其它工作线程的队列尾部获取一个任务,每个工作线程自己拥有的工作队列以外, 自身也拥有工作队列,这些工作队列的作用是用来接收有外部线程(非 )提交过来的任务,而这些工作队列被称为

入门小站