![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 92
Java基础知识
暮暮频顾惜
知道现实的残酷,只有愿意奉献自己青春去努力,才能换来青春后的美丽。
展开
-
JVM内存管理之深入理解对象
深入理解对象我们知道,Java是一门面向对象设计的语言,面向对象的程序设计语言中有类和对象的概念。类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。在面向对象的程序设计语言中,类是对一类“事物”的属性与行为的抽象。而对象是类的具体的个体。比如,小王是Person类的一个对象。Person可能存在无数个对象(就好像地球上存在数十亿人一样)。而一个对象的创建,包括两个过程:初始化和实例化。虚拟机中对象的创建过程下面是对象创建过程的一个图示:我们通常使用new原创 2021-03-10 19:02:08 · 166 阅读 · 0 评论 -
Android编程基础之序列化
序列化将数据结构或对象转换成二进制串的过程。序列化方案Serializeble Java序列化方案在Java中使用Serializeble有两种方法,一种是实现Serializeble接口,另一种是实现Externalizable接口,它继承自Java.io.Serializeble类。我们观察源码可以发现,Serializeble接口内部是没有实现的。public interface Serializeble {}实际上,Serializeble就相当于是一个flag标识,使用的时原创 2021-03-09 09:34:47 · 128 阅读 · 0 评论 -
Java虚拟机之内存管理
JVM什么是JVMJVM全称为Java Virtual Machine,就是Java虚拟机。我们的Java程序,经过javac编译之后,会生成Java字节码,通常是.class、.jar等,JVM把字节码翻译之后,就会生成操作系统能识别的机器语言。JVM有一个很重要的特性,那就是跨平台,在我们下载JDK的时候,就会有相应平台的JDK版本,不管是Windows,Linux还是Mac,都有其适配的JVM,使用不同平台的jdk,JVM就能生成在该平台可以运行的机器代码,同一个HelloWorld程序,在上面运原创 2021-03-09 09:33:54 · 120 阅读 · 0 评论 -
Java编程基础之I/O
我们为什么要学习Java I/O?在对象序列化、Json解析、XML解析、zip压缩处理的时候,均需要以I/O作为基础,这些都需要很扎实的Java基础。Java I/O 概要设计我们在I/O中经常能看见这样的使用方式:DataOutputStream out =new DataOutputStream( new BufferedOutputStream( new FileOutputStream( new File(f原创 2021-03-09 09:33:07 · 114 阅读 · 0 评论 -
AQS底层原理、运用和volatile详解
AbstractQueuedSynchronizer什么叫做AQS?从名字可以看出,AQS就是抽象队列同步器,是用来构建锁或者其他同步组件的基础框架。它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。并发包的大师(Doug Lea)期望它能够成为实现大部分同步需求的基础。AQS使用方式和其中的设计模式AQS的主要使用方式是继承,子类通过继承AQS并实现它的抽象方法来管理同步状态,在AQS里由一个int型的state来代表这个状态,在抽象方法的实现过程中免不原创 2021-02-20 11:11:05 · 544 阅读 · 0 评论 -
阻塞队列和线程池原理
阻塞队列队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。什么是阻塞队列阻塞队列是在队列的基础上实现的原创 2021-02-19 16:14:39 · 502 阅读 · 0 评论 -
并发基础知识补全和CAS基本原理
并发基础知识补全Callable、Future和FutureTask在前文(线程基础、线程之间的共享与协作)中提到过中,新启线程的方式只有两种,一种就是扩展自Thread类,然后重写run()方法,另一种就是实现Runnable接口,实现run()方法。那么Callable接口这种方式,又是怎么回事呢。我们先来观察Thread类中的构造方法,并没有可以接受一个callable这种参数的构造方法。我们使用Callable的时候,首先要把它包装成FutureTask,而它又实现了RunnableFutur原创 2021-02-04 18:03:35 · 122 阅读 · 0 评论 -
线程的并发工具类
Java 下多线程的开发可以我们自己启用多线程,线程池,除此之外,Java还为我们提供了Fork-Join、CountDownLatch、CyclicBarrier等并发工具类。掌握并使用它们,有助于我们在进行并发线程开发的过程中,更加得心应手。Fork-JoinFork-Join是一个使用多线程的并发工具类,可以让我们不去了解诸如Thread,Runnable 等相关的知识,只要遵循forkjoin的开发模式,就可以写出很好的多线程并发程序,分而治之forkjoin 在处理某一类问题时非常的有.原创 2021-02-02 16:49:50 · 125 阅读 · 0 评论 -
线程基础、线程之间的共享与协作(2)
ThreadLocal辨析与Synchonized的比较ThreadLocal 和 Synchonized 都用于解决多线程并发访问。可是 ThreadLocal 与 synchronized 有本质的差别。synchronized 是利用锁的机制,使变量或代码块 在某一时该仅仅能被一个线程访问。而 ThreadLocal为每个线程都提供了变量的副本,使得每个线程在某一时间访问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。ThreadLocal 的使用ThreadLocal 类接口很简单原创 2021-02-01 17:37:30 · 93 阅读 · 0 评论 -
线程基础、线程之间的共享与协作(1)
毫不例外,进程与线程会时常伴随着我们在在我们的日常开发中。为了加深对线程与进程理论知识的学习,本文特做记录。进程与线程进程我们都知道计算机的核心是CPU,它承担了所有的计算任务,而操作系统是计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的。进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义.原创 2021-02-01 17:36:49 · 192 阅读 · 0 评论 -
Java高级语言特性之泛型
Java高级语言特性之泛型Java泛型(generics)是JDK 5中引入的一个新特性,泛型提供了编译时类型安全监测机制,该机制允许程序员在编译时监测非法的类型。使用泛型机制编写的程序代码要比那些杂乱地使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。为了方便介绍,本文从以下几个方面来展开:为什么我们需要泛型泛型类、泛型接口、泛型方法如何限定类型变量泛型使用中的约束和局限性泛型类原创 2021-01-20 12:01:38 · 165 阅读 · 0 评论 -
Java高级语言特性之注解
注解的定义Java 注解(Annotation)又称 Java 标注,是 JDK1.5 引入的一种注释机制。注解是元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。注解本身没有任何意义,单独的注解就是一种注释,他需要结合其他如反射、插桩等技术才有意义。如何定义一个注解@Target({ElementType.TYPE})@Retention(RetentionPolicy.SOURCE)public @interface Example {原创 2021-01-13 17:40:13 · 148 阅读 · 0 评论