自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 Executor执行框架源代码分析(四)——ScheduledThreadPoolExecutor

    在前面一篇Executor执行框架源代码分析(三)中,已经详细介绍了ThreadPoolExecutor的实现方式。ScheduledThreadPoolExecutor是ThreadPoolExecutor的子类,其扩展了ThreadPoolExecutor的功能,扩展的功能主要是用来执行周期性任务的。ScheduledThreadPoolExecutor的任务分为三类:       1...

2018-03-16 14:46:54 634 1

原创 Executor执行框架源代码分析(三)——ThreadPoolExecutor

     ThreadPoolExecutor的主要是管理ThreadFactory创建的线程,Executor提交的任务。看一下ThreadPoolExecutor的继承图:                                                                      由上图可以看到,ThreadPoolExecutor是Executor和Execut...

2018-03-09 10:23:09 505

原创 Executor执行框架源代码分析(二)——ThreadFactory和Executor

       在Executor执行框架源代码分析(一)中已经介绍过ThreadFactory和Executor的作用和关系。本文继续讨论ThreadFactory和Executor的具体实现。一、ThreadFactory       ThreadFactory的目的是为了让用户可以创建定制化的线程。所以,除了一个DefaultThreadFactory之外,这个接口在JDK中基本没有具体的实现...

2018-03-07 10:23:07 1051

原创 Executor执行框架源代码分析(一)——executor、threadFactory、ThreadPoolExecutor 、Future组件的关系及作用

       executor执行框架是JDK1.5新增的,用于专注于任务执行的框架。其最大的特点就是将任务的创建和任务的执行分离,松耦合,已达到最大限度的利用计算机资源(线程和内存等)。在并发编程中,executor是一个必备的工具。     在分析源代码之前,首先需要对executor框架的整体结构有一定了解,以保证在进行源代码分析时,可以有很好的分析路线,不至于被绕晕。excutor框架最顶...

2018-03-05 11:58:46 1757

原创 AQS(AbstractQueuedSynchronizer)源代码分析(四)——Condition锁

     Condition锁是一种带条件的锁,当条件不满足时,它会挂起当前的线程,等待条件满足。当条件满足时候,会唤起当前的线程,继续执行后续的操作。其运行原理图如下:在上图中,虚线框内是AQS的非共享模式的运行原理,具体的运行过程已经在AQS(AbstractQueuedSynchronizer)源代码分析(二)文章中讲解过,这里不再赘述。我们这里主要关注Condition队列部分。     ...

2018-02-23 12:11:15 385

原创 AQS(AbstractQueuedSynchronizer)源代码分析(三)——共享的aquired和release

     本文是在AQS(AbstractQueuedSynchronizer)源代码分析(一)和AQS(AbstractQueuedSynchronizer)源代码分析(二)两篇文章的基础上编写的。关于shouldParkAfterFailedAcquire,addWaiter,parkAndCheckInterrupt,park,unpark,unparkSuccessor方法,如果不清楚,可...

2018-02-13 11:32:57 489

原创 AQS(AbstractQueuedSynchronizer)源代码分析(二)——非共享的aquired和release方法

      经过上一篇文章AQS(AbstractQueuedSynchronizer)源代码分析(一)——实现逻辑概览,可以大致的了解AQS的一个运行机制。本次将会具体看一下AQS的代码实现。首先说明一下,AQS的aquired和release方法大致分为两类:     1、非共享的,如:aquire,tryaquired,release, tryrelease等;     2、共享的,如:ac...

2018-02-12 11:58:24 522

原创 AQS(AbstractQueuedSynchronizer)源代码分析(一)——实现逻辑概览

      在学习java的锁机制时,一定会遇到AbstractQueuedSynchronizer类的实现。它几乎是java锁机制的核心,几乎所有的锁都是基于AbstractQueuedSynchronizer类实现的。所以很有必要看一下AbstractQueuedSynchronizer的源代码实现,但是直接看AQS源代码,很容易就绕晕了。主要是因为我们没能掌握AQS的运行机制,直接阅读细节实...

2018-02-11 09:04:10 446

原创 java学习总结——protobuf3的语法

本文主要讨论protobuf3在编写proto接口描述文件时的语法,下面是一个proto文件的实例:syntax = "proto3";import "address.proto";package com.study.blog.protobuf;option java_package = "com.study.blog.protobuf";/option java_outer_

2018-02-05 00:36:15 5097 4

原创 java学习总结——Apache thrift服务端与客户端的创建

thrift的使用分为三个步骤:1、创建接口描述文件,即demo.thrift文件;2、通过thrift文件生成代码。(这个过程需要安装thrift的编译环境,过程有些繁琐。thrift使用C++编写的,所以编译环境是C++的环境。编译环境教程可以网上找,挺多的。)生成代码命令:thrift -r -gen java -out "生成代码所在目录(目录必须存在)" thriftFil

2018-02-03 22:44:11 805

原创 java学习总结——Apache thrift的.thrift文件的编写

在使用apache的thrift时,第一步是需要编写thrift的接口描述文件(.thrift)。thrift文件的格式语法如下:include "share.thrift" //引入其他的thrift文件/*** 命名空间,也就是生成代码之后的package* namespace 语言名 空间名**/namespace java com.study.netty.thrift

2018-01-28 12:14:50 3041

原创 java学习总结——synchronized关键字的使用及原理分析

一、 synchronized的使用    1、方法级别的synchronizedpublic class TargetObject { private int number = 0; public void addNumber(){ for(int i=0; i<10000; i++){ number++; } } public int getNumber()

2018-01-19 17:25:38 277

原创 java学习总结——线程中异常的处理

异常分为可检查异常(checked exception)和不可检查异常(unchecked exception);对于可检查异常,必须在代码中进行显示的处理,要么通过throws关键字抛出,要么通过try{  }catch块处理。而对于不可检查异常(运行时发生的异常),不需要显示的处理。也就是说,不可检查异常不需要throws关键字抛出,也不需要catch块处理,前提是你不想处理。 示例代码:

2018-01-16 09:35:01 370

原创 java学习总结——线程的sleep、yield、join方法

一、sleep方法      这个方法使用很多,理解也很简单。让线程处于等待状态(TIME_WAITING),同时不释放资源和锁。示例代码:public class ThreadTest11 { public static void main(String[] args) throws Exception { RunnableThread runnableThread =

2018-01-12 15:26:19 258

原创 java学习总结——线程中断

首先解释一下为什么需要有线程中断。当我们操作一些软件时,会出现下面的情景。进入某个页面之后,会出现一个进度条,显示loading(意味着正在加载资源)。同时,我们也会发现在进度条的附近,会有一个"取消"按钮。当我们发现资源加载耗时很长,我们不想等下去的时候,单击“取消”按钮。这个时候就会退出资源加载的页面,返回上一个页面。这里的“取消”按钮操作就属于一种中断操作,它终止了资源加载这个操作的运行。

2018-01-12 09:30:07 249

原创 java学习总结——线程信息获取和设置

线程信息的获取和设置,这里我们只讨论一些主要的信息,如:ID,name, priority,state。一、ID和name信息的获取和设置       ID属性是JVM虚拟机为每一个新创建的线程分配的一个标识,不可更改,所以只提供了getId的方法获取ID,而没有设置ID的方法。       name属性是一个线程名字,与ID不同的是name属性是可以重复的。这个值是可以用户自定义的,

2018-01-11 14:36:51 236

原创 java学习总结——线程的创建和启动

一、线程的创建java中创建线程有两种方式:1、实现Runnable接口;2、继承Thread类。对比一下两种创建方式://实现Runnable接口public class RunnableThread implements Runnable{ //实现Runnable接口 private int number; public RunnableThread(int number

2018-01-11 09:28:59 164

原创 java8学习总结——Stream的理解

Stream初理解    JAVA8中一个重要概念就是流——stream。先来看看流的使用:public class StreamTest01 { public static void main(String[] args) { Stream stream = Stream.of(1,2,3,4); stream.map(i -> i+1).fo

2018-01-01 19:28:18 10822 2

原创 java8学习总结——Collectors类源代码分析

概述在JDK8中,对Collectos类的定义:一个Collector接口的实现,并提供很多有用的方法。事实也是如此,通过Collectors提供的方法,我们可以完成大多数日常的集合运算操作。

2017-12-16 08:57:51 4883

原创 java8学习总结——Collector接口

在JDK中对Collector的定义是一个可变的归约操作(A mutable reduction operation)。是一种操作思想,分为计算元素、归集计算结果两个主要的步骤;为了保存计算元素的中间状态,所以会提供一个容器来完成中间状态和中间结果的保存。如下面的集合操作:public class CollecorTest { public static void main(Stri

2017-12-15 00:28:23 801

原创 java8学习总结——函数式接口@FunctionalInterface

Java8提倡函数式变成,因而新增了一个函数式接口。函数式接口保证了函数式编程,同时也保证了能够兼容以前的java版本。 函数式接口的定义在java8中,满足下面任意一个条件的接口都是函数式接口:1、被@FunctionalInterface注释的接口,满足@FunctionalInterface注释的约束。2、没有被@FunctionalInterface注释的接口,但是满足

2017-12-10 12:14:01 16541 4

原创 JAVA8学习总结——函数式编程与lambda表达式

概述 java8引入lambda表达式,提倡函数式编程。根据一些函数编程的定义指出,函数式编程是基于λ演算,而λ演算的一大特点就是以函数作为输入和输出。         至于以函数作为输入和输出,在javaScript中体现得更明显一些,如下: function function1(num1,num2){ var reulst = num1+num2; docu

2017-12-03 02:33:11 465

空空如也

空空如也

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

TA关注的人

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