![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java高级
文章平均质量分 63
Java高级
菜鸟小杰
只要学不死,就往死里学!!!
展开
-
CAS原理
CAS原理CAS(compare and swap:比较和交换):是一种乐观的自旋锁。工作原理 举例:A=A+1从主存中读取A值,保存(A副本)到线程1的工作内存中。然后计算(A副本)+1后变成B值,最后再把B值写回到主存中。CAS的核心是在将B值写入到主存之前,要比较(A副本)和A值是否相同,如果不相同证明此时A值已经被其他线程改变,重新将A值赋给(A副本),并重新计算得到B,如果相同,则将B值写回到主存中。CAS其实就是实现一种乐观的自旋锁,相较于synchronize的悲观锁原创 2021-10-30 21:00:18 · 191 阅读 · 0 评论 -
ThreadLocal
ThreadLocalThreadLocal:线程变量,ThreadLocal为变量在每个线程中都创建了一个副本,该变量是当前线程独有的变量。对其他线程而言是隔离的。既然每个 Thread 有自己的实例副本,且其它 Thread 不可访问,那就不存在多线程间共享的问题。ThreadLocal 变量通常被private static修饰。当一个线程结束时,它所使用的所有 ThreadLocal 相对的实例副本都可被回收。Thread、 ThreadLocalMap及ThreadLocal 三者之原创 2021-10-28 23:58:22 · 83 阅读 · 0 评论 -
Java反射的实现原理
Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。BIO...原创 2021-02-02 18:24:58 · 440 阅读 · 1 评论 -
同步/异步与阻塞/非阻塞的理解
同步/异步的概念同步:已知调用结果后才将调用返回异步:不需要等待调用结果即可返回,有调用结果后,被调用方会“通知”调用方阻塞/非阻塞的概念阻塞:调用方在收到调用结果前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。非阻塞:调用方在收到调用结果前,可处理其他事务同步异步就是消息通知机制,阻塞和非阻塞在进程(线程)等待消息通知时的状态。故事:老王烧开水出场人物:老王,两把水壶(水壶,响水壶)同步阻塞: 效率是最低的。老王用水壶烧水,并且站在那里(阻塞),不管水开没开,原创 2021-01-31 21:38:50 · 81 阅读 · 0 评论 -
序列化和反序列化
序列化和反序列化序列化:将对象变成二进制保存在文件或者数据库中。反序列化:将文件中或数据库中的二进制文件变成一个对象。对象序列化的两种用途:**对象持久化:**把对象的字节序列永久地保存到硬盘上。**网络传输对象:**数据是以二进制序列的形式在网络上进行传输的。所以发送方需要把对象转换成字节序列,才能在网络上传送;接收方 则需要把字节序列再恢复成对象。举例:Web 服务器中的 Session 会话对象,当有10万用户并发访问,就有可能出现10万个 Session 对象,显然这种情况内原创 2021-10-27 00:12:17 · 821 阅读 · 0 评论 -
java IO流
IO流概念流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出IO流的分类按流的流向不同分为:输入流,输出流输入流:从别的地方获取资源 输入到 我们的程序中(只读)输出流:从我们的程序中 输出到 别的地方(只写)。按流的数据单位可以分为:字节流,字符流字节流:以字节为单位读写数据,当原创 2021-10-24 10:20:28 · 58 阅读 · 0 评论 -
BIO和NIO
BIO和NIOJava 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。BIO同步阻塞I/O模式:因为socket.accept()、 socket.read()、 socket.write() 是同步阻塞的。举例:当服务器用read去客户端的的数据时,是无法预知对方是否已经发送数据的。因此在收到数据之前,当前线程会原创 2021-10-24 00:18:53 · 2641 阅读 · 0 评论 -
进程与线程
进程与线程线程:线程是一条执行路径,是程序执行时的最小单位。进程:进程是一个独立的运行环境,它可以看作一个程序或一个应用。进程和线程的关系:一个程序就是一个进程,而一个程序中的多个任务则被称为线程。进程是表示资源分配的基本单位。一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是程序执行时的最小单位。同一进程的所有线程共享该进程的所有资源。即同一个进程中的多个线程共享Java虚拟机的堆和方法区每个线程拥有自己的私有内存:Java虚拟机中的虚拟机栈,本地方法栈,程序计数原创 2021-10-24 11:08:48 · 2101 阅读 · 0 评论 -
串行和并行和并发
串行和并行和并发串行:代码从上而下按照固定的顺序执行,只有上一件事情执行完毕,才能执行下一件事。并发:并发的实质是一个CPU(也可以多个CPU) 在多个线程之间多路复用,以提高cup的利用率。通俗点讲,并发就是多个线程之间要竞争CPU的执行权,CPU要在多个线程之间来回切换(CPU与线程的关系:一对多)。并行:在同一时刻多个线程,在不同CPU(多核)上同时执行(CPU与线程的关系:一对一)。...原创 2021-10-24 11:05:53 · 453 阅读 · 0 评论 -
创建多线程的方式
创建多线程的方式继承 Thread类实现 Runable接口实现 Callable接口线程池继承 Thread类创建Thread的子类,重写run()方法,然后启动Thread类public class Test { public static void main(String[] args) {// 第二步:创建Thread子类的对象,通过对象调用start方法(启动当前线程)。 new MyThread().start();//再启动一个多线程,要重新创建一原创 2021-10-24 11:14:50 · 67 阅读 · 0 评论 -
Java 线程池
线程池线程池的真正实现类是ThreadPoolExecutor。其构造方法有几个重要的参数:corePoolSize:核心线程数。默认情况下,核心线程会一直存活,但是当将allowCoreThreadTimeout设置为true时,核心线程也会超时回收。maximumPoolSize:线程池所能容纳的最大线程数。当活跃线程数达到该数值后,后续的新任务将会阻塞。keepAliveTime:线程闲置超时时长。如果超过该时长,非核心线程就会被回收。如果将allowCoreThreadTimeout设置为原创 2021-10-24 11:24:14 · 274 阅读 · 0 评论 -
Thread的常用方法
Thread的常用方法方法说明yield()释放当前cpu的执行权。不会释放锁join()将某个线程插入到当前线程,使当前线程进入阻塞状态,直到插入的线程执行完,当前线程才结束阻塞状态。sleep()使当前线程进入阻塞状态,阻塞指定的毫秒数。 不会释放锁interrupt()中断线程。只能中断阻塞过程中的线程而不能中断正在运行过程中的线程。如sleep();wait()使当前线程进入阻塞状态,并释放同步锁notify()唤醒一个wait线程。原创 2021-10-24 11:33:47 · 87 阅读 · 0 评论 -
Java内存模型(原子性、可见性、有序性)
Java内存模型(原子性、可见性、有序性)原子性:原子性操作指相应的操作是单一不可分割的操作。同一时刻只能有一个线程来对它进行操作。简而言之,在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作。在多线程环境中,非原子操作可能会受其他线程的干扰。举例:请分析以下哪些操作是原子性操作: x = 10; //语句1 y = x; //语句2语句1是原子性操作:语句1是直接将数值10原创 2021-10-24 11:40:34 · 2694 阅读 · 0 评论 -
synchronized与volatile
synchronized与volatilesynchronized:同步(synchronization)就是指一个线程访问数据时,其它线程不得对同一个数据进行访问,即同一时刻只能有一个线程访问该数据,当这一线程访问结束时其它线程才能对这它进行访问。可见性synchronization的两条规定:线程解锁前,必须把共享变量的最新值刷新到主内存线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新读取最新的值。原子性:由于synchronized能够保证原创 2021-10-24 11:39:27 · 265 阅读 · 0 评论 -
线程安全问题
线程安全问题能用图的地方尽量不废话,先来看一张图:上图描述了一个多线程执行场景。线程 A 和线程 B 分别对主内存的变量进行读写操作。其中主内存中的变量为共享变量,多个线程间共享。但是线程不能直接读写主内存的共享变量,每个线程都有自己的工作内存,线程需要读写主内存的共享变量时需要先将该变量拷贝一份副本到自己的工作内存,然后在自己的工作内存中对该变量副本进行所有操作,线程工作内存对变量副本完成操作之后需要将结果同步至主内存。 我们在操作共享数据的时候,可能会出现线程安全问题。例子:线程A,B同时对原创 2021-10-25 07:20:58 · 213 阅读 · 0 评论 -
JDBC总结
1.什么是JDBCJDBC的全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。从上图可以看出,应用程序使用JDBC访问特定的数据库时,需要与不同的数据库驱动进行连接。由于不同数据库厂商提供的数据库驱动不同,因此,为了使应用程序与数据库真正建立连接,JDBC不仅需要提供访问数据库的API,还需要封装与各种数据库服务器通信的细节为了帮助大原创 2021-02-20 16:55:59 · 210 阅读 · 1 评论 -
JVM总结
JVM总结1.JVM原理:我们都知道Java源文件,通过编译器,能够生产相应的.Class文件,也就是字节码文件,而字节码文件又通过Java虚拟机中的解释器,编译成特定机器上的机器码 。每一种平台的解释器是不同的,但是实现的虚拟机是相同的,这也就是Java为什么能够跨平台的原因了 。2.JVM的生命周期JVM实例:JVM实例对应了一个独立运行的java程序——进程级别。一个运行时的Java虚拟机(JVM)负责运行一个Java程序。当启动一个Java程序时,一个虚拟机实例诞生;当程序关闭退出,这个原创 2021-09-07 22:58:47 · 52 阅读 · 0 评论