代码改变世界

随笔分类 -  Java

浅谈volatile与automicInteger

2019-01-05 19:00 by GarfieldEr007, 1596 阅读, 收藏,
摘要: 在并发环境中有三个因素需要慎重考量,原子性、可见性、有序性。 voatile 保证了有序性(防止指令冲排序)和变量的内存可见性(每次都强制取主存数据),每次取到volatile变量一定是最新的 volatile主要用于解决可见性,它修饰变量,相当于对当前语句前后加上了“内存栅栏”。使当前代码之前的代 阅读全文

AtomicInteger类和int原生类型自增鲜明的对比

2019-01-05 18:57 by GarfieldEr007, 388 阅读, 收藏,
摘要: AtomicInteger这个类的存在是为了满足在高并发的情况下,原生的整形数值自增线程不安全的问题。比如说 int i = 0 ; i++;12上面的写法是线程不安全的。 有的人可能会说了,可以使用synchronized关键字啊。 但是这里笔者要说的是,使用了synchronized去做同步的话 阅读全文

java中关于AtomicInteger的使用

2019-01-05 18:53 by GarfieldEr007, 232 阅读, 收藏,
摘要: 在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。咳哟参考我之前写的一篇博客http://www.cnblogs.com/sharkli/p/5597148.html,今天 阅读全文

【Java并发】JUC—ReentrantReadWriteLock有坑,小心读锁!

2019-01-05 13:22 by GarfieldEr007, 526 阅读, 收藏,
摘要: 好长一段时间前,某些场景需要JUC的读写锁,但在某个时刻内读写线程都报超时预警(长时间无响应),看起来像是锁竞争过程中出现死锁(我猜)。经过排查项目并没有能造成死锁的可疑之处,因为业务代码并不复杂(仅仅是一个计算过程),经几番折腾,把注意力转移到JDK源码,正文详细说下ReentrantReadWr 阅读全文

深入理解读写锁ReentrantReadWriteLock

2019-01-05 13:19 by GarfieldEr007, 227 阅读, 收藏,
摘要: 1.读写锁的介绍 在并发场景中用于解决线程安全的问题,我们几乎会高频率的使用到独占式锁,通常使用java提供的关键字synchronized(关于synchronized可以看这篇文章)或者concurrents包中实现了Lock接口的ReentrantLock。它们都是独占式获取锁,也就是在同一时 阅读全文

可重入读写锁ReentrantReadWriteLock基本原理分析

2019-01-05 13:18 by GarfieldEr007, 325 阅读, 收藏,
摘要: 前言 本篇适用于了解ReentrantLock或ReentrantReadWriteLock的使用,但想要进一步了解原理的读者。见于之前的分析都是借鉴大量的JDK源码,这次以流程图的形式代替源码,希望读者能有更好的阅读体验。有兴趣了解源码的读者也可以借鉴本篇的分析成果做源码分析。 在《从源码分析Re 阅读全文

深入分析ReentrantLock公平锁和非公平锁的区别

2019-01-05 13:12 by GarfieldEr007, 356 阅读, 收藏,
摘要: 在ReentrantLock中包含了公平锁和非公平锁两种锁,通过查看源码可以看到这两种锁都是继承自Sync,而Sync又继承自AbstractQueuedSynchronizer,而AbstractQueuedSynchronizer又继承自AbstractOwnableSynchronizer,下 阅读全文

在 JDK 9 中更简洁使用 try-with-resources 语句

2019-01-02 21:56 by GarfieldEr007, 478 阅读, 收藏,
摘要: 本文详细介绍了自 JDK 7 引入的 try-with-resources 语句的原理和用法,以及介绍了 JDK 9 对 try-with-resources 的改进,使得用户可以更加方便、简洁的使用 try-with-resources 语句。 在 JDK 7 之前,资源需要手动关闭。 例如下面一 阅读全文

java try-with-resource语句使用

2019-01-02 21:55 by GarfieldEr007, 4445 阅读, 收藏,
摘要: 定义 JDK7之后,Java多了个新的语法:try-with-resources语句, 可以理解为是一个声明一个或多个资源的 try语句(用分号隔开), 一个资源作为一个对象,并且这个资源必须要在执行完关闭的, try-with-resources语句确保在语句执行完毕后,每个资源都被自动关闭 。 阅读全文

深入理解 Java try-with-resource 语法糖

2019-01-02 21:51 by GarfieldEr007, 847 阅读, 收藏,
摘要: 背景 众所周知,所有被打开的系统资源,比如流、文件或者Socket连接等,都需要被开发者手动关闭,否则随着程序的不断运行,资源泄露将会累积成重大的生产事故。 在Java的江湖中,存在着一种名为finally的功夫,它可以保证当你习武走火入魔之时,还可以做一些自救的操作。在远古时代,处理资源关闭的代码 阅读全文

Java断言绝对不是鸡肋

2019-01-02 21:45 by GarfieldEr007, 1171 阅读, 收藏,
摘要: 在防御式编程中经常会用断言(Assertion)对参数和环境做出判断,避免程序因不当的输入或错误的环境而产生逻辑异常,断言在很多语言中都存在,C、C++、Python 都有不同的断言表示形式。在Java 中的断言使用的是assert 关键字,其基本的用法如下: assert < 布尔表达式> ass 阅读全文

Java陷阱之assert关键字

2019-01-02 21:45 by GarfieldEr007, 406 阅读, 收藏,
摘要: Java陷阱之assert关键字 一、概述 在C和C++语言中都有assert关键,表示断言。 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多。 二、语法 在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关 阅读全文

Java 条件编译

2019-01-02 21:37 by GarfieldEr007, 603 阅读, 收藏,
摘要: 在C/C++中,使用#ifdef…#endif的代码,如果不满足条件,编译器是不会对这部分代码进行编译的。Java中并没有这种“条件编译”特性。这种特性在C语言里是用来解决代码的跨平台问题的,可以通过让代码的不同部分根据其运行的具体平台进行编译。由于Java本身就设计为一种跨平台的语言,因此这种特性 阅读全文

Java 语法糖详解

2019-01-01 17:28 by GarfieldEr007, 499 阅读, 收藏,
摘要: 语法糖 语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法。 这种语法对语言的功能并没有影响,但是更方便程序员使用。简而言之,语法糖让程序更加简洁,有更高的可读性。 有意思的是,在编程领域,除了语法 阅读全文

Java中有哪些语法糖?

2019-01-01 17:27 by GarfieldEr007, 466 阅读, 收藏,
摘要: 不要你写汇编,Java句句是糖 不能同意上面的这句话,要说为什么,首先要定义下面要讲的“语法糖”。 语法糖指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,并没有给语言添加什么新东西,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。语法糖_百度百 阅读全文

Java中部分常见语法糖

2019-01-01 17:25 by GarfieldEr007, 294 阅读, 收藏,
摘要: 语法糖(Syntactic Sugar),也称糖衣语法,指在计算机语言中添加的某种语法,这种语法对语言本身功能来说没有什么影响,只是为了方便程序员的开发,提高开发效率。说白了,语法糖就是对现有语法的一个封装。 参考:https://blog.csdn.net/danchu/article/detai 阅读全文

Java中的语法糖

2019-01-01 17:24 by GarfieldEr007, 200 阅读, 收藏,
摘要: 一、范型 1. C#和Java范型的区别 在C#中范型是切实存在的,List<int>和List<String>就是两种不同的类型,它们在系统运行期间生成,有自己的虚方法表和类型数据,这种实现称为类型膨胀,基于这种方法实现的范型称为真实范型。 Java语言中的范型则不一样,它只存在于源码中,在编译后 阅读全文

java中的字符编码方式

2019-01-01 17:15 by GarfieldEr007, 1586 阅读, 收藏,
摘要: 1. 问题由来 面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下。 2. 几种字符编码的方式 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个 阅读全文

Java SPI机制学习笔记

2018-12-31 13:36 by GarfieldEr007, 288 阅读, 收藏,
摘要: 最近在阅读框架源代码时,常常看到 SPI 的子包, 忍不住查了下: Service Provider Interface : 服务提供接口。 JavaSPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。具体而言: STEP1. 定义一组接口, 假设是 autocomplet 阅读全文

Java SPI机制简介

2018-12-31 13:35 by GarfieldEr007, 221 阅读, 收藏,
摘要: SPI 简介 SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现, 而后,把新加 阅读全文
上一页 1 2 3 4 5 6 ··· 12 下一页