![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
Kevin_cai09
无情的bug maker
展开
-
java并发(二)synchronized和volatile
文章目录二,synchronized2.1 临界区2.2 竞态条件2.3 synchronized应用及原理2.3.1 synchronized应用2.3.2 synchronized原理Java对象头monitor2.4 synchronized优化2.4.1 轻量级锁2.4.2 重量级锁2.4.3 偏向锁三,volatile3.1 可见性3.2 原子性3.3 有序性3.3.1 指令重排序3.4...原创 2020-03-05 00:40:05 · 390 阅读 · 0 评论 -
java并发(一)进程和线程
一,进程和线程1.1 进程和线程1.1.1 进程程序由指令和数据组成,但这些指令要运行,数据要读写,都必须将指令加载到CPU,数据加载到内存,在指令运行过程中还需要用到磁盘,网络等设备,进程就是用来加载指令,管理内存,和管理IO的当一个程序运行,程序代码从磁盘加载到内存就相当于开启了一个进程进程相当于一个程序的实例1.1.2 线程一个进程中有一到多个线程一个线程就是一个指令流...原创 2020-03-05 00:25:45 · 447 阅读 · 2 评论 -
实现自己的ArrayList
实现自己的ArrayList文章目录实现自己的ArrayList一,java标准库的ArrayList1.底层结构2.增删改查3.扩容4.快速失败机制二,自己的ArrayList1.底层结构2.增删改查3.扩容一,java标准库的ArrayList1.底层结构 private static final int DEFAULT_CAPACITY = 10; transient ...原创 2020-02-05 18:01:23 · 226 阅读 · 0 评论 -
java中的字符串String
文章目录java中的字符串String1.String类结构2. String数据结构定义3.构造方法4.String常用方法5.String真的不可变吗?java中的字符串String本文只是分析String的基本方法的源码1.String类结构String是一个不可变类,不可被继承,可以被序列化,可以比较大小,是一个有序字符的序列public final class String...原创 2019-10-27 20:32:19 · 293 阅读 · 0 评论 -
java中的三种代理模式
文章目录一,静态代理二,动态代理1.相关类2.实现3.分析三,cglib代理1.介绍2.实现3.分析上文中我总结过代理模式,代理模式是一种可以在不改变目标对象源码的情况下,实现对目标对象的增强代理模式具体分为:静态代理动态代理jdk动态代理cglib动态代理今天来看看java中的代理模式的经典的三种使用一,静态代理静态代理是代理模式的实现方式之一,是相对于动态...原创 2019-06-21 12:35:32 · 348 阅读 · 0 评论 -
java中的断言Assert
一,断言检查assertion(断言)在软件开发中是一种常用的调试方式,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告并且退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。...原创 2019-06-11 13:25:44 · 5712 阅读 · 2 评论 -
并发编程 -- ThreadLocal
文章目录一,ThreadLocal1.内部结构图2.内部核心机制二,深入ThreadLocal1.核心方法2.源码分析get()set()initialValue()remove()三,探究ThreadLocalMap的几个问题1.简介2.Hash冲突怎么解决解决方法3.内存泄漏问题如何避免内存泄漏一,ThreadLocalThreadLocal是线程变量,是一个以ThreadLocal对象...原创 2019-06-16 17:29:14 · 190 阅读 · 0 评论 -
并发编程 -- 同步队列器
文章目录一,同步队列器1.核心数据结构节点基本结构:首节点设置尾节点设置二,独占式同步状态的获取和释放1.独占式获取同步状态(对中断不敏感)2.独占式响应中断获取3.释放4.总结三,共享式同步状态的获取和释放1.共享式获取同步状态2.释放昨天整理的不够清晰,今天重新看看了,再次总结了一篇一,同步队列器1.核心数据结构同步器依靠内部的同步队列(fifo的双向队列)来完成同步状态的管理当...原创 2019-06-20 16:09:46 · 321 阅读 · 0 评论 -
并发编程 -- 线程池
文章目录一,线程池二,线程池工作及框架工作流程图:Executor框架1.两级调度模型2.框架结构框架结构框架成员框架工作流程三,线程池实现ThreadPoolExecutorFixedThreadPoolSingleThreadExecutorCachedThreadPool四,线程池关闭及监控1.线程池关闭2.监控线程池一,线程池java中的线程池是运用场景最多的并发框架,几乎所有需要异...原创 2019-06-16 01:47:52 · 333 阅读 · 0 评论 -
并发编程 -- lock和同步队列器初识
文章目录一,Lock接口1.与synchronized异同之处2.特性3.API表二,队列同步器1.简介2.使用访问或修改同步状态同步器可重写的方法同步器提供的模板方法独占锁实现实现分析锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源,但是有些锁可以允许多个线程并发的访问共享资源(读写锁)一,Lock接口java se5前,java程序是依靠syn...原创 2019-06-20 00:16:49 · 283 阅读 · 0 评论 -
并发编程 -- ScheduledThreadPoolExecutor
文章目录ScheduledThreadPoolExecutor1.简介2.实现3.源码分析1.执行定时任务2.执行周期任务ScheduledThreadPoolExecutor1.简介ScheduledThreadPoolExecutor继承自ThreadPoolExecutor,它主要用来在给定的延迟后运行任务,或者定期执行任务,类似Timer,但是其更强大更灵活,可以在构造函数指定多个对...原创 2019-06-17 13:37:36 · 255 阅读 · 0 评论 -
并发编程 -- ReentrantLock
一,公平锁和非公平锁公平锁保证了在多线程环境下各个线程获取锁的顺序,先到的线程先获取到锁,也可以说,先对锁进行请求,请求等待时间最长的线程先获取到锁非公平锁在线程获取时,各线程获取到的概率是随机的如果要用同步队列器来讲的话,就是当第一个线程去请求获得锁时,如果成功获取到锁,则第二个线程只能进入同步队列等待第一个线程释放锁,然后在尝试获取锁,但是,如果此时来了第三个线程,如果是公平...原创 2019-06-21 16:03:15 · 259 阅读 · 0 评论 -
并发编程 -- java中的原子操作
文章目录一,java中的原子操作类型二,原子更新基本类型1.原子更新原理2.UnSafe作用使用3.CASCAS操作原理三,原子更新引用类型使用四,原子更新类中字段五,原子更新数组一,java中的原子操作类型jdk1.5开始提供了Atomic包,这个包中的原子操作类提供了一种用法简单,性能高效,线程安全的更新一个变量的方式二,原子更新基本类型该类用于原子的更新基本类型:AtomicIn...原创 2019-07-02 00:17:26 · 297 阅读 · 0 评论 -
并发编程 -- 原子操作原理
一,什么是原子操作?原子操作就是不可中断的一个或一系列的操作如何实现原子操作?首先处理器是能自动保证基本的内存操作的原子性,处理器自动保证从系统内存中读取或者写入一个字节是原子的,当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。但是对于复杂的内存操作处理器是不能自动保证其原子性的,比如跨总线宽度,跨多个缓存行和跨页表的访问。复杂内存操作实现原子性1.总线锁定当处理器A...原创 2019-07-02 14:48:58 · 489 阅读 · 0 评论 -
并发编程 -- 读写锁
文章目录一,读写锁简介二,ReentrantReadWriteLock简单使用1.使用ReentrantReadWriteLock维护一个线程不安全的hashmap2.原理解析读状态写状态读锁的获取和释放写锁的获取和释放一,读写锁简介之前说的ReentrantLock是一种排他锁,和synchronized类似,排他锁保证同一时刻只有一个线程进行访问,但是读写锁是维护一对读锁和写锁,读锁允许在...原创 2019-07-02 17:17:32 · 581 阅读 · 0 评论 -
并发编程 -- join和sleep
在看并发编程这本书时,看到join()方法,似曾相识的感觉,但是一时间又想不出具体的作用,觉得还是写写代码记录下,加深记忆号先看一个demopublic class JoinAndSleepDemo { private static Thread thread1 = new Thread(new Runnable() { @Override publ...原创 2019-07-08 23:04:03 · 490 阅读 · 0 评论 -
并发编程 -- condition
一,condition简介任何一个java对象都拥有一对监视器方法(定义在Object上)主要包括:wait()/wait(long timeOut),notify(),notifyAll(),这些方法和synchronized配合实现等待/通知机制Condition接口也提供了类似的监视器方法,配合Lock实现等待/通知机制二,使用1.简单使用调用lock.newCondition(...原创 2019-07-03 16:37:35 · 195 阅读 · 0 评论 -
stream对象
文章目录一,stream概述二,使用三,Optional类1.概况:2.创建Optional对象3.接收值4.获取Optional对象中的值5.简单应用一,stream概述什么是stream?这里的stream不同于IO中的inputStream和OutputStream,stream位于java.util.stream中,是一组支持串行并行聚合操作的元素,也可以理解成集合或者迭代器的增强版...原创 2019-08-06 22:21:21 · 1115 阅读 · 0 评论 -
lambda表达式
lambda表达式是java8新引入的一个新的新特性,类似于js中的闭包,目的就是提供一个类似函数式编程的语法来简化我们的编码一,lambda基本语法其实lambda表达式跟原来写一个方法思路是很相似的,只是,lambda表达式可以使我们原来的方法简单化编码,更加清晰明了基本结构://(方法参数) -> 方法体(args)->body常见的基本写法可以有:/*** 1...原创 2019-08-06 22:21:52 · 143 阅读 · 0 评论 -
并发编程 -- volatile和synchronized
文章目录一,volatile1.作用2.原理二,synchronized1.synchronized基本用法修饰实例方法修饰静态方法修饰代码块2.浅谈synchronized原理synchronized执行过程对象头3.锁升级和对比偏向锁出现原因偏向锁获得锁过程偏向锁释放锁过程轻量级锁轻量级锁加锁轻量级锁释放锁一,volatile1.作用保证变量在多线程环境下的线程可见性,其他线程能感知到该...原创 2019-06-15 00:53:26 · 355 阅读 · 0 评论 -
并发编程 -- 线程间通信
文章目录一,什么是线程间的通信?二,线程通信应用1.volatile关键字2.synchronized关键字synchronized执行流程3.等待/通知机制4.等待超时机制一,什么是线程间的通信?线程间的通信说到底就是线程间的相互交互或者说是相互配合来完成既定的工作,如果多个线程间是独立的存在,那么多线程是毫无意义二,线程通信应用1.volatile关键字java支持多个线程同时访问同...原创 2019-06-14 15:42:26 · 284 阅读 · 0 评论 -
并发编程 -- 线程构建及线程状态
文章目录一.线程1.基本概念2.一个普通的java程序包括哪些线程二,创建线程1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法3.带有返回值的多线程实现 --- 实现callable接口4.基于线程池三,线程状态1.状态图2.过程一.线程1.基本概念现代操作系统调度的最小单元是线程,也叫轻量级进程一个进程里可以创建多个线程每一个线程都拥有各自的计数器,...原创 2019-06-14 00:01:56 · 331 阅读 · 0 评论 -
IO(二)字节流转化为字符流
虽然说字节流可以处理任意类型的数据,但是字节流的使用不及字符流来的方便,在某些情况下,我们需要将字节流转化为字符流来简化我们的操作字节输入流转为字符输入流//字节输入流转字符输入流 public static void castIn(InputStream inputStream) { //指定字符编码 Reader reader = new InputStreamReader...原创 2019-03-31 01:52:54 · 475 阅读 · 0 评论 -
IO(一)字节流和字符流
流概述流是一个连续的数据对象,可以从这个对象中获取数据,也可以写入数据,流操作往往会涉及三个概念,数据源,媒介,应用程序我们的流,往往就是应用程序和数据源交互的媒介IO流概述1,IO流是用来处理设备与设备之间的数据传输的2,java对数据传输的操作是通过流的形式进行的3,java操作IO流的API都在IO包下流分类按照流向类型分:输入流:设备----&g...原创 2019-03-30 18:30:36 · 304 阅读 · 0 评论 -
反射
反射反射机制是在运行状态中对于任意一个类,都能知道这个类的所有属性和方法对于任意一个对象,都能调用他的任意一个方法和属性反射提供的功能在运行时判断任意一个对象所属于的类在运行时构造任意一个类的对象在运行时判断任意一个类所具有的成员变量和方法在运行时调用任意一个对象的方法生成动态代理反射入口 – 获取class对象在java中有两种对象 — 实例对象和class对象,实例对象...原创 2019-03-25 22:29:45 · 130 阅读 · 0 评论 -
泛型
注解基础原创 2019-03-28 01:42:28 · 4873 阅读 · 0 评论 -
hashcode()
1.什么是hashcode每个对象都有hashcode,每一个对象都有一个地址,即对象在内存中的位置(这里我们把这个位置称为内存地址),而hashcode又是什么呢?hashcode其实也是一个地址,只不过这个地址是指对象在哈希表中的位置,那么对象如何得到hashcode呢?通过对象的内存地址转换成一个整数,然后该整数通过hash函数的算法就得到了hashcode。jdk源码中的hashco...原创 2019-03-21 01:30:58 · 133 阅读 · 0 评论 -
equals()
equals() 的作用是什么?equals() 与 == 的区别是什么?hashCode() 的作用是什么?hashCode() 和 equals() 之间有什么联系?1.equals()作用:equals字面意思:相等,很容易就联想到这个方法是不是就是用来判断对象与对象是不是一样,是不是相等,其实equals()方法分为两种:没有重写的equals() 即Ob...原创 2019-03-20 01:54:33 · 988 阅读 · 0 评论 -
java基础--内部类
java内部类有一下四种成员内部类静态内部类方法内部类匿名内部类一,成员内部类//外部类public class Outter { private int a = 99; private int e = 700; // 外部类是不能直接使用内部类的成员和方法 public void outMethod() { System.out.println("外部类...原创 2019-02-27 20:40:56 · 133 阅读 · 0 评论 -
java基础----多线程(1)
1.线程和进程1.什么是进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。eg:打开迅雷软件,迅雷软件在运行,就是一个进程。2.什么是线程线程,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元。eg...原创 2019-01-16 01:48:04 · 174 阅读 · 0 评论 -
IO(三)BufferedInputStream和BufferedOutputStream
前面我们知道FileInputStream和FileOutputStream直接操作的文件,这样其实文件的读取和写入性能很低,如果是边读边写,就会很慢,也伤硬盘,我们可以使用之前提到过的缓冲区的概念,先把数据放入缓冲区,当缓冲区满了或者数据读完了,就一次性的吧缓冲区的内容输出到文件。缓冲区就是内存里的一块区域,把数据先存内存里,然后一次性写入,类似数据库的批量操作,这样效率比较高。这时我们需要用...原创 2019-03-31 02:37:30 · 224 阅读 · 0 评论 -
IO(四)BufferedWriter和 BufferedReader
BufferReader类是从字符输入流中读取文本并缓冲字符,以便有效的读取字符,数组和行BufferReader /** * BufferReader */ public static void inBufferWriter() { File file = new File("abc.txt"); try { Reader reader = new F...原创 2019-03-31 21:01:08 · 796 阅读 · 0 评论 -
装饰设计模式
装饰设计模式也叫作包装器模式装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰设计模式降低了系统的耦合度,可以动态的增加或者删除对象的职责,并使得需要装饰的对象的具体构建类和具体装饰类可以独立的变化,以便增加新的具体构建类和具体装饰类抽象基类(抽象构件)给出一个抽象接口,以规范准备接收附加责任的对象...原创 2019-03-31 22:12:27 · 211 阅读 · 0 评论 -
java 通过JPCAP实现简易ping程序
在计网课设中需要通过raw socket的方式实现一个ping程序,而raw socket是一种原始套接字可以接收本机网卡上的数据帧或者数据包,但是java仅仅支持到应用层,是无法直接操作底层的,如果想访问ICMP可以下载jpcap这个类库一,JPCAPJpcap是一个可以监控当前网络情况的中间件,弥补了java对网络层以下的控制jpcap下载与安装1.下载地址:网盘地址提取码...原创 2019-06-05 18:13:13 · 3771 阅读 · 5 评论 -
浅谈string中的compareTo方法
今天看了一篇gitchat的文章,标题是 聊聊 Java String 源码的排序算法,从中有所感悟和思考,因此打算总结下自己看的过程中的收获一,java.lang.Comparable 接口Comparable 接口强制了实现类对象列表的排序。其排序称为自然顺序,其 compareTo 方法,称为自然比较法public interface Comparable<T> {...原创 2019-05-23 01:18:01 · 28731 阅读 · 5 评论 -
java中的绑定
浅谈java中的绑定1.什么是绑定?绑定是指一个方法的调用和该方法所属的类(所在的类)相关联,意思就是在执行方法调用的时候,jvm所知道调用了哪个类的方法,类和调用方法相关联java绑定分类:静态绑定(前期绑定)运行时绑定(后期绑定)2.静态绑定什么是静态绑定?静态绑定就是程序在执行前就知道了该方法所属的类,即在编译前该方法已经绑定,在java中只有private , stat...原创 2019-05-17 18:16:21 · 2127 阅读 · 1 评论 -
定时任务ScheduledExecutorService
ScheduledExecutorService1.简介ScheduledExecutorService是jdk对定时任务调度的线程池支持,由于Timer是单线程的,所以在解决并发任务时会存在缺陷,所有任务都由一个线程来管理,所有任务都是串行执行,同一时间只能执行一个任务。无法适应实际项目中任务定时调度的复杂度。所以,jdk5之后便退出了基于线程池的定时任务调度ScheduledExecuto...原创 2019-05-06 01:15:24 · 1156 阅读 · 0 评论 -
定时任务Timer
定时任务Timer1.简介Timer是jdk自带的一个定时器工具,使用的时候会在主线程之外另起一个新的线程执行定时任务,定时任务可以指定执行一次,也可以反复执行多次。其中,Timer在使用过程中也会经常用到TimerTask,TimerTask是一个实现了Runnable接口的实现类(抽象类),代表一个可以被Timer执行的定时任务2.使用开启一个简单定时任务步骤:新建TimerT...原创 2019-05-06 00:46:27 · 240 阅读 · 0 评论 -
NIO基础
NIO简介java.nio全称java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。为所有的原始类型提供(Buffer)缓存支持。字符集编码解码解决方案。 Channel :一个新的原始I/O 抽象。 支持锁和内存映射文件的文件访问接口。 ...原创 2019-04-03 15:22:01 · 313 阅读 · 0 评论 -
String、StringBuffer、StringBuilder
String类:1.String的创建原理由于String在java中使用过于频繁,java为了避免在系统中存在大量string的对象,引入了字符串常量池,其运行机制是:如果通过 String str1 = “897”; 直接量赋值方式,创建一个字符串时,首先会检查字符串常量池中是否有值相同的字符串对象,如果有,则不需要创建对象直接从常量池中查找到对象的引用,如果没有,则新建字符串对象,但是,...原创 2019-04-08 16:45:37 · 149 阅读 · 0 评论