3 ITKaven

尚未进行身份认证

小白成长中。

等级
TA的排名 4k+

Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用

Java并发编程一CountDownLatch、CyclicBarrier、Semaphore初使用这些线程协作工具类是基于AQS的,看完这篇博客后可以去看下面这篇博客,了解它们是如何实现的。Java并发之AQS详解CountDownLatchCountDownLatch可以实现一个线程等待多个线程、多个线程等待一个线程、多个线程等待多个线程。我们首先来看看怎么实现一个线程等待多个线程吧...

2020-02-20 15:25:50

Java并发编程一Condition初使用

Java并发编程一Condition初使用Condition是什么?Condition是在Java1.5中才出现的,它用来替代传统Object中的wait()、notify(),实现线程间的协作,相比使用Object的wait()、notify(),使用Condition的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition,阻塞队列...

2020-02-19 23:07:44

BlockingQueue(阻塞队列)详解

BlockingQueue(阻塞队列)详解原文地址BlockingQueue一. 前言在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。二. 认识Bl...

2020-02-19 20:25:35

Java并发之AQS详解

Java并发之AQS详解原文地址Java并发之AQS详解1、概述谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountD...

2020-02-19 17:18:48

Java集合框架总结

Java集合框架总结原文地址java提高篇(二十)-----集合大家族正文在编写Java程序中,我们最常用的除了八种基本数据类型,String类外还有一个集合类,在我们的程序中到处充斥着集合类的身影!Java中集合大家族的成员实在是太丰富了,有常用的ArrayList、HashMap、HashSet,也有不常用的Stack、Queue,有线程安全的Vector、HashTable,也有线程...

2020-02-19 15:05:46

ArrayList和CopyOnWriteArrayList

ArrayList和CopyOnWriteArrayList原文地址ArrayList和CopyOnWriteArrayList这篇文章的目的如下:了解一下ArrayList和CopyOnWriteArrayList的增删改查实现原理。看看为什么说ArrayList查询快而增删慢?CopyOnWriteArrayList为什么并发安全且性能比Vector好。1. List接口首...

2020-02-19 10:41:33

Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析原文地址Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析正文今天发一篇"水文",可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍。本来以为花不了多少时间的,不过最终还是投入了挺多时间来完成这篇文章的。网上关于 HashMap 和 Concu...

2020-02-18 21:57:22

Java并发编程一引用类型、升级类型原子类初使用加源码分析

Java并发编程一引用类型、升级类型原子类初使用加源码分析首先我们来看一看有哪些原子类。现在我们来看看该如何去使用这些引用类型、升级类型原子类吧。之前已经介绍过基本类型、数组类型原子类和累加器的使用了,讲过的原理这里就不会再涉及了,想了解就看下面这篇博客吧。Java并发编程一基本类型、数组类型原子类和累加器初使用加源码分析AtomicReferenceAtomicReference...

2020-02-18 13:33:14

Java并发编程一基本类型、数组类型原子类和累加器初使用加源码分析

Java并发编程一基本类型原子类初使用加源码分析首先我们来看一看有哪些原子类。现在我们来看看该如何去使用这些原子类吧。AtomicInteger代码:package atomic;import java.util.concurrent.atomic.AtomicInteger;public class AtomicIntegerDemo1 implements Runnabl...

2020-02-18 11:39:51

Java并发编程一ReentrantReadWriteLock初使用

Java并发编程一ReentrantReadWriteLock初使用ReentrantReadWriteLock是一种读写锁,从类名也可以看出来。ReentrantReadWriteLock类有两个属性ReentrantReadWriteLock.ReadLock readerLock(代表读锁)、ReentrantReadWriteLock.WriteLock writerLock(代表写锁...

2020-02-17 23:11:49

Java并发编程一Lock和ReentrantLock初使用

Java并发编程一Lock初使用首先我们来演示一下两个线程不断的打印两个字符串。代码package lock.reentrantlock;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 描述: 演示ReentrantLock的基本用法,演示被打...

2020-02-17 20:42:04

分门别类总结Java中的各种锁,让你彻底记住

分门别类总结Java中的各种锁,让你彻底记住原文地址分门别类总结Java中的各种锁,让你彻底记住前言本文需要具备一定的多线程基础才能更好的理解。学习Java多线程时,最头疼的知识点之一就是Java中的锁了,什么互斥锁、排它锁、自旋锁、死锁、活锁等等,细分的话可以罗列出20种左右的锁,光是看着这些名字就足以让人望而却步了,更别说一个个去理解它们的含义了。其实我要在这里告诉大家,我们看到的其...

2020-02-17 16:58:48

Java并发编程一ThreadLocal初使用

Java并发编程一ThreadLocal初使用任务为了方便使用以及展现ThreadLocal的优点,首先给出一个任务,然后根据任务的并发数去迭代代码,我们假设每个线程的任务很简单,就是打印我们要求的时间,具体看代码。现在我们只需要两个线程去打印时间。代码一package threadlocal;import java.text.SimpleDateFormat;import jav...

2020-02-17 15:12:25

ThreadLocal-面试必问深度解析

ThreadLocal-面试必问深度解析原文地址ThreadLocal-面试必问深度解析ThreadLocal是什么ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不同的变量值完成操作的场景。从数据结构入手下图为ThreadLocal的内部结构...

2020-02-17 13:53:10

强引用、软引用、弱引用、虚引用

强引用、软引用、弱引用、虚引用原文地址强引用、软引用、弱引用、虚引用正文从JDK1.2开始,就提供了四种类型的引用:强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的:让程序员通过代码的方式决定某些对象的生命周期。有利于JVM进行垃圾回收。强引用(StrongReference)强引用就是指在程序代码之中普遍存在的,比如下面这段代码中的object和...

2020-02-16 16:50:19

Java并发编程一线程池的五种状态

Java并发编程一线程池的五种状态原文地址Java多线程线程池(4)–线程池的五种状态正文线程池的5种状态:Running、ShutDown、Stop、Tidying、Terminated。线程池各个状态切换框架图:RUNNING状态说明:线程池处在RUNNING状态时,能够接收新任务(线程池没有满的情况下),以及对已添加的任务进行处理。状态切换:线程池的初始化状态是RUNNI...

2020-02-16 12:08:20

Java并发编程一如何关闭线程池

Java并发编程一如何关闭线程池当线程池中已经有大量线程在处理任务,并且任务队列中也有很多任务在等待被处理,这个时候我们该如何去关闭线程池呢?首先我们来创建一个任务。任务ShutDownTask类实现了Runnable接口,它的run()就是我们线程所要执行的任务,我们这里的任务非常简单,就是输出自己(当前线程)的名称,再sleep(500)即可。class ShutDownTask i...

2020-02-16 11:32:55

Java并发编程一四种常用线程池简述

Java并发编程一四种常用线程池简述我们使用线程是用来执行任务的,所以,首先我们得有一个任务,这里我们定义线程的任务很简单,就是输出自己(当前线程)的name,为了方便观察,每个线程的执行逻辑中sleep(500)。任务Task类,实现了Runnable接口。package threadpool;class Task implements Runnable { @Overri...

2020-02-15 23:23:50

Java并发编程一线程池简介

Java并发编程一线程池简介为什么我们需要使用线程池?我们知道线程是一种比较昂贵的资源,我们通过程序每创建一个线程去执行,其实操作系统都会对应地创建一个线程去执行我们的任务,而我们频繁的创建、销毁线程是非常耗费系统资源的,当并发数不大时,对系统似乎没什么影响,但当并发数很大时,我们为每一个请求都创建一个线程,然后等待被调度、执行完任务后再销毁,这样是很耗费服务器资源的。而我们使用线程池去管理...

2020-02-15 21:43:06

Java内存模型JMM

Java内存模型JMM原文地址java内存模型JMM理解整理什么是JMMJMM即为JAVA 内存模型(java memory model)。因为在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。Java内存模型,就是为了屏蔽系统和硬件的差异,让一套代码在不同平台下能到达相同的访问结果。J...

2020-02-15 16:04:33

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到王者
    签到王者
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。