自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

kaven

为梦而逐

  • 博客(68)
  • 收藏
  • 关注

原创 Java并发编程汇总

基础正文JAVA实现多线程到底有多少种方法?哪种方法更好呢?深入浅出 synchronizedJava中Volatile关键字详解扩展阅读双重检查锁单例模式为什么要用volatile关键字?未完待续...

2020-02-09 12:37:30 2065 7

原创 RabbitMQ汇总

基础正文未完待续扩展阅读MOM与JMS

2020-02-08 15:13:46 1907 4

原创 Java网络编程汇总

Java网路编程汇总基础一文读懂一台计算机是如何把数据发送给另一台计算机的Java IO体系的学习总结未完待续

2020-02-02 00:49:41 2136

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

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

2020-02-20 15:25:50 1093

原创 Java并发编程一Condition初使用

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

2020-02-19 23:07:44 933

转载 BlockingQueue(阻塞队列)详解

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

2020-02-19 20:25:35 1835

转载 Java并发之AQS详解

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

2020-02-19 17:18:48 963

转载 Java集合框架总结

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

2020-02-19 15:05:46 957

转载 ArrayList和CopyOnWriteArrayList

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

2020-02-19 10:41:33 1158 2

转载 Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

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

2020-02-18 21:57:22 860

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

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

2020-02-18 13:33:14 1747

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

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

2020-02-18 11:39:51 780

原创 Java并发编程一ReentrantReadWriteLock初使用

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

2020-02-17 23:11:49 794

原创 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 898

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

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

2020-02-17 16:58:48 885

原创 Java并发编程一ThreadLocal初使用

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

2020-02-17 15:12:25 729

转载 ThreadLocal-面试必问深度解析

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

2020-02-17 13:53:10 1299

转载 强引用、软引用、弱引用、虚引用

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

2020-02-16 16:50:19 739

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

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

2020-02-16 12:08:20 766

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

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

2020-02-16 11:32:55 1360

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

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

2020-02-15 23:23:50 777 2

原创 Java并发编程一线程池简介

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

2020-02-15 21:43:06 1245

转载 Java内存模型JMM

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

2020-02-15 16:04:33 735

转载 死锁、饥饿和活锁

死锁、饥饿和活锁原文地址Java并发编程系列之十二:死锁、饥饿和活锁正文死锁发生在一个线程需要获取多个资源的时候,这时由于两个线程互相等待对方的资源而被阻塞,死锁是最常见的活跃性问题。这里先分析死锁的情形:假设当前情况是线程A已经获取资源R1,线程B已经获取资源R2,之后线程A尝试获取资源R2,这个时候因为资源R2已经被线程B获得了,所以线程A只能阻塞直到线程B释放资源R2。另一方面,...

2020-02-15 15:09:59 789

转载 线程的属性

线程的属性原文地址多线程学习(三)—— 线程的属性线程属性概览属性名称用途注意事项ID每个线程都有自己的ID,用于识别不同的线程被后续创建的线程使用;不允许被修改Name便于用户在开发、调试或运行过程中区分每个不同的线程、定位问题等清晰有意义的名字;默认的名称isDaemontrue:代表是守护线程,false:非守护线程(用户线程)继承父线程...

2020-02-14 22:04:32 1138

转载 Thread和Object中的重要方法详解

Thread和Object类中的重要方法详解原文地址多线程学习(二)——Thread和Object类中的重要方法详解方法概览类方法名简介Threadsleep相关sleep的相关重载方法join等待其他线程执行完毕yield相关放弃已获得的CPU资源currentThread获取当前执行线程的引用start, run相关启动...

2020-02-14 21:56:32 1153

转载 停止线程的正确姿势

停止线程的正确姿势原文地址Java线程状态和关闭线程的正确姿势正文线程的run()方法正常执行完毕之后线程就正常死亡进入TERMINATED状态了,那么如果我们有中途停止线程的需求,我们应该如何正确的结束一个线程呢?使用interrupt()方法在线程内部,其定义了一个变量来标识当前线程是否处于被打断状态,调用interrupt()方法则使这个状态变为true;换句话说,线程在阻塞状态...

2020-02-14 21:03:53 852

转载 Java线程状态及转换

Java线程状态及切换原文地址Java线程状态和关闭线程的正确姿势正文Java中的线程有六种状态,使用线程Thread类的枚举类来实现,如下,我对每个状态都进行了一定的解释。public enum State { /** 表示一个线程还没启用(即未调用start方法)*/ NEW, /** * JVM中执行的线程都是处于...

2020-02-14 20:44:33 884

原创 启动线程的正确姿势

启动线程的正确姿势通过之前的分析,我们知道有两种定义线程执行逻辑的方法,而创建线程只有一种方法,也就是new一个Thread类的实例。JAVA实现多线程到底有多少种方法?哪种方法更好呢?...

2020-02-14 16:54:33 924 2

转载 Java线程的概念:什么是线程?

Java线程的概念:什么是线程?世间万物都可以同时完成很多工作。例如,人体可以同时进行呼吸、血液循环、思考问题等活动。用户既可以使用计算机听歌,也可以编写文档和发送邮件,而这些活动的完成可以同时进行。这种同时执行多个操作的“思想”在 Java 中被称为并发,而将并发完成的每一件事称为线程。在 Java 中,并发机制非常重要,但并不是所有程序语言都支持线程。在以往的程序中,都以一个任务完成以后再...

2020-02-14 14:19:47 1722

原创 Java网络编程-Socket编程初涉七(UDP协议,简易提供-搜索服务)

Java网络编程-Socket编程初涉七(UDP单播,简易提供-搜索服务案例一)UDP的单播、多播、广播提供端提供端作为接收信息的一方,需要指定一个端口用于数据接收;等搜索端把请求发送过来时,提供端接收请求信息,并且打印请求信息,再简单的回送一条信息即可。package udp.search;import java.io.IOException;import java.net.Dat...

2020-02-14 12:01:46 774

原创 UDP的单播、多播、广播

UDP的单播、多播、广播使用UDP协议进行信息的传输之前不需要建立连接。换句话说就是客户端向服务器发送信息,客户端只需要给出服务器的IP地址和端口号,然后将信息封装到一个待发送的报文中,并且发送出去。至于服务器端是否存在,或者能否收到该报文,客户端根本不用管。一、UDP单播单播用于两个主机之间的端对端通信。二、UDP广播UDP广播与单播的区别就是IP地址不同,广播使用广播地址(根据IP...

2020-02-14 10:34:30 1959 2

原创 RabbitMQ:死信队列

Java初识RabbitMQ一死信队列什么是死信队列死信队列,DLX(dead-letter-exchange),利用DLX,当消息在一个队列中变成死信 (dead message) 之后,它能被重新投递到另一个exchange上,这个exchange就是DLX,似乎叫死信交换机更加贴切,当死信投递到这个exchange后,我们也可以用queue来绑定该exchange,该exchange可以...

2020-02-13 15:17:32 1937

原创 RabbitMQ:过期时间(TTL)

Java初识RabbitMQ一过期时间(TTL)过期时间(TTL)TTL(Time To Live),也就是过期时间。RabbitMQ可以对消息和队列设置TTL。设置消息的TTL设置消息TTL的两种方式:通过队列属性设置,队列中所有消息都有一样的TTL。对消息本身进行单独设置TTL。如果两种方式一起使用,则消息的TTL以两者之间较小的那个数值为准。消息在队列中的生存时间一旦超过...

2020-02-13 14:23:54 1727

原创 RabbitMQ:重回队列

Java初识RabbitMQ一消费端ACK与重回队列在Java初识RabbitMQ一消费端限流这篇博客中我们讲了,要使用RabbitMQ的QOS,要把autoAck设置成false,这时我们就要进行手动ack了,但是之前的博客中我们只实践了手动ack,而没有实践过手动no ack ,当消费端认为消息消费不成功时,便会应答no ack,以便说明这个消息我(消费端)没有消费成功,接下来就看Rabbi...

2020-02-13 11:32:26 4838

原创 RabbitMQ:消费端限流

Java初识RabbitMQ一消费端限流为什么要对消费端限流假设一个场景,首先,我们 Rabbitmq 服务器积压了有上万条未处理的消息,我们随便打开一个消费端,巨量的消息就会瞬间全部推送过来,但是我们单个消费端是无法同时处理这么多消息的。当数据量特别大的时候,我们对生产端限流肯定是不科学的,因为有时候并发量就是特别大,有时候并发量又特别少,我们无法约束生产端,这是用户的行为。所以我们应该对...

2020-02-12 21:03:05 2037

原创 RabbitMQ:消费端自定义监听

Java初识RabbitMQ一消费端自定义监听之前的例子中,消费端实现监听绑定的Queue是否有准备好了的消息时,是通过一个while死循环来实现的,看起来很不优雅,如下所示: // 接收消息 while (true){ QueueingConsumer.Delivery delivery = consumer.nextDelivery()...

2020-02-12 15:29:25 6214

原创 RabbitMQ:Return消息机制

Java初识RabbitMQ一Return消息机制什么是Return消息机制Return消息机制用于处理一些不可路由的消息。正常情况下,消息生产端通过指定一个Exchange和RoutingKey,把消息路由到某一个队列中去,然后消费端监听队列,进行消费。但在某些情况下,如在发送消息的时候,当前的Exchange不存在或者指定的RoutingKey路由不到Queue,这个时候,如果我们需要监听...

2020-02-12 14:42:39 2071

原创 RabbitMQ:消息确认机制

Java初识RabbitMQ一消息确认机制生产端Confirm消息确认机制消息确认,是指生产端投递消息后,如果Broker收到消息,则会给我们生产端一个应答。生产端接收应答,用来确定这条消息是否正常发送到Broker,这种方式也是消息可靠性投递的核心保障!Confirm确认机制流程图如何实现Confirm消息确认机制?我们需要实现Confirm消息确认机制,首先我们必须要开启这种机制。...

2020-02-12 13:01:32 2571 1

转载 UDP 协议解析

UDP 协议解析原文地址UDP 协议解析 - 11. 概述用户数据报协议(UDP,User Datagram Protocol)为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据报的方法。UDP是一种保留消息边界的简单的面向数据报的协议。UDP不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制,但提供差错检测(包含我们在传输层中碰到的第一个真实的端到端(end-to-end)...

2020-02-11 21:25:52 1410

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除