Java学习笔记
文章平均质量分 66
陳大大丶
这个作者很懒,什么都没留下…
展开
-
深拷贝和浅拷贝到底有什么区别?
浅拷贝只是拷贝了引用类型属性的地址,而深拷贝拷贝了引用类型属性的数据,实现了完全拷贝。原创 2023-02-08 14:28:09 · 206 阅读 · 0 评论 -
ASCII码值与字符的相互转换
前言ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。在编程中可以借助ASCII编码的字符解决一些常见的问题。字符转ASCII码 /** * 字符转ASCII码 * @param n * @return */ public st原创 2020-09-20 16:40:58 · 9131 阅读 · 0 评论 -
toString()方法和StringUtils里的join()方法差异对比
今天在写代码时,想要把一个接收的集合转换成用逗号隔开的字符串,想到是用toString()方法可以呢还是用StringUtils.join()方法可以呢?两者之间有什么差别呢?就写了一个简单的测试代码做了一个小测试,代码如下:import org.apache.commons.lang.StringUtils;import java.util.ArrayList;import java.util.HashSet;import java.util.Set;/** * toString()方法和原创 2020-06-02 09:28:54 · 741 阅读 · 0 评论 -
虚拟机中Java对象的创建
前言这篇文章主要是介绍一下Java对象在虚拟机中是如何创建的?由什么组成?又是如何访问到的?文中讨论的只是普通的Java对象,不包括数组和Class对象等。对象的创建对于对象的创建过程,不同的虚拟机有不同的实现方式。指针碰撞空闲列表...原创 2020-01-02 16:45:22 · 178 阅读 · 1 评论 -
Java虚拟机运行时数据区域
前言最近刚换了新工作,忙于理解新的业务,就没有什么时间写博客,今天抽空写一篇关于Java虚拟机运行时内存分配的文章,闲言少续,开整。根据Java虚拟机规范第7版,规定了Java虚拟机所管理的内存会包含以下几个数据区域,如下图接下来对每一个区域的特点进行简单的概述。1. 程序计数器程序计数器占用的内存比较小,主要作用是告诉线程下一步该执行哪一个字节码指令。因此,为了保证线程切换后能恢复到...原创 2019-12-24 13:06:00 · 105 阅读 · 0 评论 -
JDK内置的及第三方实现的线程池拒绝策略
前言谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的这个api,大大的简化了多线程代码的开发。而不论你用FixedThreadPool还是CachedThreadPool其背后实现都是ThreadPoolExecutor。ThreadPoolExecutor是一个典型的缓存池化设计的产物,因为池子有大小,当池...转载 2019-11-14 16:19:39 · 225 阅读 · 0 评论 -
线程池(ThreadPoolExecutor)的七大参数
在4种常见的线程池创建方式这篇文章里,通过查看源码发现,线程池的创建底层都是通过下面这个方法实现的,这个方法里有七个参数,也是面试中常常问到的知识点。public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, ...原创 2019-11-12 11:47:52 · 1238 阅读 · 0 评论 -
4种常见的线程池创建方式
为什么使用线程池(线程池的优点):线程复用:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗;提高响应速度:当任务到达时,不需要等待线程的创建就可以立即执行;提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。线程池的实现:通过Executors.newFixedThreadPo...原创 2019-11-11 17:09:24 · 987 阅读 · 0 评论 -
自旋锁(spinlock)的理解
1.什么是自旋锁?是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少线程上下文切换的消耗;缺点是循环会消耗CPU资源。jdk中的rt.jar包的unsafe类中getAndAddInt方法就采用了自旋锁,源码如下: // unsafe.getAndAddInt public final int getAndAddInt(Object var1, long v...原创 2019-11-07 15:50:07 · 1735 阅读 · 0 评论 -
可重入锁(递归锁)的理解
1.什么是可重入锁?可重入锁,也称递归锁,指的是同一线程外层函数获得锁之后,内层递归函数仍能能获取该锁。同一个线程中,在外层方法获取锁后,进入内层方法会自动获取锁。线程可以进入任何一个它已经拥有的锁所同步着的代码块。ReentrantLock、Synchronized 都是典型的可重入锁。2.可重入锁有什么作用? 可重入锁最大的作用就是可以避免死锁。...原创 2019-11-07 15:08:12 · 946 阅读 · 0 评论 -
公平锁与非公平锁
公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,有先来后到。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。在高并发的情况下,可能会造成优先级反转或者饥饿现象。 Lock lock = new ReentrantLock();当使用ReentrantLock的空参构造方法时,默认为非公平锁,源码如下: /** *...原创 2019-11-06 16:09:02 · 184 阅读 · 0 评论 -
Thread类中start()方法和run()方法的区别
首先,通过继承Thread类的方式,创建一个线程,然后分别在主线程中调用run()和start()方法,观察两者输出的区别,代码如下:package Demo;/** * @ClassName:MyTheard * @Description:通过thread创建线程 * @Author:legend Chan * @Date:2019/11/5 4:16 下午 * @Version...原创 2019-11-05 16:44:51 · 270 阅读 · 0 评论 -
【Java】集合对象按照指定属性排序(比如姓名拼音排序)
最近项目里需要对集合中的对象按照name属性排序,要求name属性按照字母排序后,返回集合结果,下面是实现方式:首先要实现排序的对象要实现Comparable类,重写该类的compareTo方法,方法里写明要比较的属性,代码如下:```package com.longcloud.oapm.portal.experience.vo;import javax.persistence.Col...原创 2019-07-09 12:36:53 · 2521 阅读 · 0 评论