
java
文章平均质量分 91
进击的代码家
这个作者很懒,什么都没留下…
展开
-
synchronized实现原理
synchronized的三种应用方式synchronized关键字最主要有以下3种应用方式,下面分别介绍修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。synchronized作用于实例方法无问题写法;public class AccountingSync implements Runnable{ //共享资源(临界资源原创 2021-02-14 22:45:24 · 1841 阅读 · 0 评论 -
如何理解volatile
java内存模型与原子性,可见性和有序性Java内存模型规定所有的变量都是存在主存当中,每个线程都有自己的工作内存。线程对变量的所有操作都必须在自己的工作内存中进行,而不能直接对主存进行操作。并且每个线程不能访问其他线程的工作内存。在java中,执行下面这个语句:int i=3;执行线程必须先在自己的工作线程中对变量i所在的缓存行进行赋值操作,然后再写入主存当中。而不是直接将数值3写入主存当中。原子性对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执原创 2021-02-14 19:44:02 · 192 阅读 · 0 评论 -
Java单例模式的写法及优缺点
总结下Java单例模式的几种写法:1.饿汉式public class Singleton{ private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; }}优点:实现简单,不存在多线程问题,直接声明一个私有对象,然后对外提供一个获取对象的原创 2021-02-14 18:08:52 · 468 阅读 · 1 评论 -
一文让你了解java生产消费者模型
在面试中,多线程问题中,可能会让手写生产消费者模型,所以本篇我们就来讲解一下。所谓生产者-消费者问题,实际上主要是包含了两类线程,一种是生产者线程用于生产数据,另一种是消费者线程用于消费数据,为了解耦生产者和消费者的关系,通常会采用共享的数据区域如果共享数据区已满的话,阻塞生产者继续生产数据放置入内;如果共享数据区为空的话,阻塞消费者继续消费数据;在实现生产者消费者问题时,可以采用三种方式...原创 2019-07-10 17:27:47 · 396 阅读 · 0 评论 -
务实java基础之集合总结
Java 提供了容纳对象(或者对象的句柄)的多种方式。其中内建的类型是数组,此外, Java 的工具库提供了一些 “集合类”,利用这些集合类,我们可以容纳乃至操纵自己的对象。 声明:本篇博客内容参考自《java编程思想》,代码均来自书中,大部分内容截取自该书数组和第一类对象无论使用的数组属于什么类型,数组标识符实际都是指向真实对象的一个句柄。那些对象本身是在内存 “堆”里创建的。堆对象既可“隐原创 2017-08-06 11:31:32 · 7958 阅读 · 1 评论 -
务实java基础之IO
“对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务。”由于存在大量不同的设计方案,所以该任务的困难性是很容易证明的。其中最大的挑战似乎是如何覆盖所有可能的因素。不仅有三种不同的种类的 IO 需要考虑(文件、控制台、网络连接),而且需要通过大量不同的方式与它们通信(顺序、随机访问、二进制、字符、按行、按字等等)。 Java 库的设计者通过创建大量类来攻克这个难题。事实上, Java 的原创 2017-08-14 00:06:10 · 6233 阅读 · 5 评论 -
《Effective Java》读书笔记(二)之对于所有对象都通用的方法
第八条 在改写equals的时候请遵守通用约定一般以下几种情况,不适宜覆盖equals方法 1.类的每个实例本质上都是唯一的,对于代表活动实体而不是值的类确实如此,例如Thread.2.不关心类是否提供了“逻辑相等”的测试功能3.超类已经覆盖了equals,从超类继承过来的行为对子类也是合适的4.类是私有的或者包级私有的,可以确定它的equals方法永远不会被调用。那什么情况应该覆盖Object.原创 2017-07-30 14:20:40 · 665 阅读 · 0 评论 -
《Effective Java》读书笔记(一)之创建和销毁对象
最近在研读《Effective Java》一书,读书不做点笔记,感觉很容易就忘掉,于是用本篇博客来记录阅读此书的笔记。 郑重声明: 由于是《Effective Java》一书的笔记,所以大部分内容基本来自此书,还有一小部分是自己的理解。第1条 考虑用静态工厂方法代替构造器一般来说,获取一个类的实例,大家想到的都是通过该类的公有构造函数来new 一个实例,而第一条推荐我们可以考虑使用静态工厂方法来创原创 2017-07-21 00:29:21 · 1518 阅读 · 0 评论 -
《深入理解java虚拟机》学习笔记之虚拟机即时编译详解
Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”,为了提高热点代码的执行效率,在运行时, 虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器,即时编译器编译性能的好坏、 代码优化程度的高低却是衡量一款商用虚拟机优秀与否的最关键的指标之一,本篇博原创 2017-06-18 19:24:55 · 9112 阅读 · 7 评论 -
《深入理解java虚拟机》学习笔记之编译优化技术
郑重声明:本片博客是学习<深入理解Java虚拟机>一书所记录的笔记,内容基本为书中知识. Java程序员有一个共识,以编译方式执行本地代码比解释方式更快,之所以有这样的共识,除去虚拟机解释执行字节码时额外消耗时间的原因外,还有一个很重要的原因就是虚拟机设计团队几乎把对代码的所有优化措施都集中在了即时编译器之中(在JDK 1.3之 后,Javac就去除了-O选项,不会生成任何字节码级别的优化代码了原创 2017-06-23 00:33:53 · 4116 阅读 · 0 评论 -
java泛型详解
在日常的开发中,我们会看到别人的框架很多地方会使用到泛型,泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。本篇博客我们就来详细解析一下泛型的知识。泛型类定义及使用使用泛型有什么好处呢?首先我们先看一个例子,原创 2017-04-07 01:24:59 · 5119 阅读 · 2 评论