
Java
文章平均质量分 89
记录Java学习
Tyfrank
记录学习过程,整理学习资料。博客内容大部分为参考多篇博客/文章/书籍/教程整理,仅供学习记录。
展开
-
【Java多线程】Future类使用
Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果等操作。它代表是异步执行的结果,意思是当异步执行结束之后,返回的结果将会保存在Future中。当我们提交一个Callable任务后,我们会同时获得一个Future对象,然后,我们在主线程某个时刻调用Future对象的get()方法,就可以获得异步执行的结果。在调用get()时,如果异步任务已经完成,我们就直接获得结果。如果异步任务还没有完成,那么get()会阻塞,直到任务完成后才返回结果。原创 2023-04-01 10:59:05 · 1528 阅读 · 0 评论 -
【Java多线程】volatile与内存屏障详解
volatile读的内存语义:读一个volatile变量时,JMM会把线程对应的工作内存中共享变量数据设置为无效的,然后会从主内存中去读取共享变量最新的数据。禁止上面的volatile写和下面的volatile读/写或普通写操作重排序,前面所有的volatile写的操作,数据都已经刷新到主内存。volatile写:针对的是volatile的变量,在写的时候,是把volatile变量的值,从工作内存刷新到主内存。是一种屏障指令,它使得CPU或编译器对屏障指令的前和后所发出的内存操作,执行一个排序的约束。原创 2023-03-28 09:47:37 · 1547 阅读 · 0 评论 -
【Java多线程】线程池探究
线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。本文学习记录的线程池是JDK中提供的ThreadPoolExecutor类。原创 2023-03-21 15:42:27 · 336 阅读 · 0 评论 -
【Java多线程】Synchronized和lock底层剖析
Compare and Swap,翻译成比较并交换。执行函数CAS(V,E,N),3个操作数,内存值V,旧的预期值E,要修改的新值N。当且仅当预期值E和内存值V相同时,将内存值V修改为N,否则什么都不做。AQS核心思想是,如果被请求的共享资源空闲,那么就将当前请求资源的线程设置为有效的工作线程,将共享资源设置为锁定状态;如果共享资源被占用,就需要一定的阻塞等待唤醒机制来保证锁分配。这个机制主要用的是CLH队列的变体实现的,将暂时获取不到锁的线程加入到队列中。原创 2023-03-20 01:24:50 · 620 阅读 · 0 评论 -
【Java】面向对象三大基本特征
Java面向对象三大基本特征原创 2023-03-19 16:12:33 · 423 阅读 · 0 评论 -
【JVM】垃圾回收器
串行回收器:Serial,Serial old;并行回收器:ParNew,Parallel scavenge,Parallel old;并发回收器:CMS、G1;新生代收集器:Serial,ParNew,Parallel scavenge;老年代收集器:Serial old,Parallel old, CMS;整堆收集器:G1;原创 2023-03-01 19:33:19 · 943 阅读 · 0 评论 -
【消息队列】关于消息队列的一些面试问题
生产者投递消息的速率>消费者消费的速率,导致我们消息会堆积在我们 mq 服务器端中,没有及时的被消费者消费,所以就会产生消息堆积的问题。1.多线程方式实现异步可能会消耗到我们的 cpu 资源,可能会影响到我们业务线程执行会发生 cpu 竞争的问题;背景:mq服务器集群或者mq采用分区模型架构存放消息,每个分区对于一个消费者消费消息。消费者获取消息,如果消费消息失败, mq 服务器则会间隔的形式 实现重试策略;rabbitmq 消费者我们的消息消费如果成功,消息会被立即删除。A.提高消费者消费的速率;原创 2023-02-21 15:50:06 · 166 阅读 · 0 评论 -
【Java基础/数据结构】栈(Stack)与队列(Queue、Deque)
Java堆栈、队列原创 2023-01-27 12:18:28 · 329 阅读 · 0 评论 -
【Java基础】String & StringBuffer & StringBuilder
方法时,实际传递的是引用的一个拷贝。其实,每当把 String 对象作为方法的参数时,都会复制一份引用,而该引用所指向的对象其实一直待在单一的物理位置上,从未动过。Java 语言本身并不支持运算符重载,“+”和“+=”是专门为 String 类重载过的运算符,也是 Java 中仅有的两个重载过的运算符。的返回值,其实是最终结果的引用。是 Java SE5 引入的,在这之前用的是。值的方法,实际上都是创建了一个全新的。返回的引用已经指向了一个新的对象,而。的定义,传入其中的引用有了名字。原创 2023-01-23 12:16:13 · 179 阅读 · 0 评论 -
【Java并发/多线程】基本概念|创建线程|线程状态
Java并发/多线程进程和线程的区别进程是一个独立的运行环境,而线程是在进程中执行的一个任务。他们两个本质的区别是是否单独占有内存地址空间及其它系统资源(比如I/O):进程单独占有一定的内存地址空间,所以进程间存在内存隔离,数据是分开的,数据共享复杂但是同步简单,各个进程之间互不干扰;而线程共享所属进程占有的内存地址空间和资源,数据共享简单,但是同步复杂。进程单独占有一定的内存地址空间,一个进程出现问题不会影响其他进程,不影响主程序的稳定性,可靠性高;一个线程崩溃可能影响整个程序的稳定性,可靠性较原创 2022-02-26 21:44:26 · 272 阅读 · 0 评论 -
【Java注解】@Test注解测试应用和实践探究
Java@Test注解实践利用Junit测试的@Test注解,可以避免经常编写测试类。@Test注解,方便我们对一段代码进行测试。需要导入相应的包:import org.junit.Test;在方法前加上 @Test , 则该方法即为测试方法,可以执行。下图为第四版《Java编程思想》的描述但在实际使用中发现方法权限只能是public,不能用static修饰,而且不能用于内部类的方法。、Case1 下面的代码可以正常执行,输出正常import org.junit.Test;publ原创 2022-02-19 20:25:57 · 13869 阅读 · 2 评论 -
【JVM JMM】Java虚拟机 Java内存学习入门篇
Java虚拟机 JVM学习一、什么是JVM1.定义Java Virtual Machine,JAVA程序的运行环境(JAVA二进制字节码的运行环境)JVM 是 Java 的核心和基础,在 Java 编译器和 os 平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行 Java 的字节码程序。Java 编译器只需面向 JVM,生成 JVM 能理解的代码或字节码文件。Java 源文件经编译器,编译成字节码程序,通过 JVM 将每一条指令翻译成不同原创 2022-02-26 11:01:17 · 653 阅读 · 0 评论 -
【Java类初始化】实例详解
Java类初始化W3Cschool Java类初始化类的加载过程加载-链接-初始化加载:将class文件字节码内容加载到内存中,并将这些静态数据换成方法取得运行时的数据结构,然后生成一个代表这个类的java.lang.Class对象。链接:将Java类的二进制代码合并到JVM的运行状态之中的过程。验证:确保加载的类信息符合JVM规范,没有安全方面的问题。准备:正式为类变量分配内存并设置类变量默认初始值的阶段,这些内存都将在方法区中进行分配。解析:虚拟机常量池内的符号引用(常量名)替换原创 2022-02-25 23:47:36 · 441 阅读 · 0 评论