![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java 笔记
文章平均质量分 64
青年老魏
这个作者很懒,什么都没留下…
展开
-
从源码层面谈谈 ThreadLocal 线程私有实现方式
前言ThreadLocal 是一个用于存取线程本地变量的类,通过其实例的 get/set 方法进行数据的存取,数据存取到 ThreadLocal 后,只有线程自身能访问到,如下图:线程私有示例代码先看一段代码:public static void main(String[] args) throws InterruptedException { ThreadLocal<String> threadLocal = new ThreadLocal<>(); T原创 2020-07-21 14:05:55 · 267 阅读 · 1 评论 -
浅谈 Java 中的 volatile 作用(一):线程可见性
浅谈 Java 中 volatile 作用之:线程可见性前言volatile 在 Java 中有两个作用:线程可见性当一个线程对共享变量值做了修改,新值是能够及时的被其他线程获取到的。防止指令重排序本篇博文结合代码谈谈 volatile 关键字的线程可见性。概念线程可见性是指当一个线程对共享变量值做了修改,新值是能够及时的被其他线程获取到的。举个例子,假设有一共享变量 runFlag,该变量使用关键字 volatile 修饰:volatile boolean runFlag原创 2020-07-16 20:22:54 · 442 阅读 · 0 评论 -
[引用] 死磕 Synchronized 底层实现
原文地址如下,此处只做索引。死磕Synchronized底层实现–概论死磕Synchronized底层实现–偏向锁死磕Synchronized底层实现–轻量级锁死磕Synchronized底层实现–重量级锁原创 2020-07-10 18:33:10 · 161 阅读 · 0 评论 -
实验查看 Java 对象布局
前言我们知道,Java 对象由对象头、实例数据、对象补齐三部分组成,其布局如下图所示:Java 对象布局图下面通过实验的方式查看 Java 对象的布局。环境准备本次实验在 Debian 64 位操作系统中进行,使用 JDK 版本如下:shaw@shaw-pc:~$ java -versionjava version "1.8.0_211"Java(TM) SE Runtime Environment (build 1.8.0_211-b12)Java HotSpot(TM) 64-Bit原创 2020-07-06 15:45:51 · 461 阅读 · 0 评论 -
浅谈 JDK 的读写锁——ReentrantReadWriteLock
从 JDK1.5 开始,JDK 加入了 ReentrantLock 类,该类能够像 synchronized 关键字一样实现线程之间的同步互斥,并且在功能上比 synchronized 更强大,使用起来也更灵活。然而,ReentrantLock 在某些情况下也有自身的不足,因为同一时间内只有一个线程能够获取到锁并执行,这虽然保证了线程的安全,但假设我们有多个线程只是需要对对象进行读取操作,并没...原创 2018-04-11 03:29:16 · 659 阅读 · 0 评论 -
Java 自动装箱导致的性能问题
从 Java 1.5 开始,新增了自动装箱(autoboxing)的功能,这一定程度上模糊了基本类型与装箱基本类型的区别,有些人会很随意地将两者进行混用,这样代码在编译及运行时虽不报错,但在性能上却有着不小的差别,看下面的例子:long startTime = System.currentTimeMillis();Long sum = 0L;for (long i = 0; i < ...原创 2018-03-12 22:35:00 · 675 阅读 · 0 评论 -
关于 Java 中的 @Override 覆写
覆写(1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。 (2) 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型原创 2017-07-27 16:13:14 · 701 阅读 · 0 评论 -
使用 JDK 动态代理
如何使用 JDK 动态代理使用 JDK 的动态代理,需要完成以下两步: - 编写服务接口及其实现 - 编写代理类,代理类中提供绑定方法和代理方法接下来我们通过代码一步步完成一个动态代理的示例。 编写接口package com.shawearn.proxy.service;/** * Created by Shawearn on 2017/8/1. */public interface M原创 2017-08-02 16:36:11 · 262 阅读 · 0 评论 -
测试多个线程调用同一静态方法(无静态变量)时是否有线程安全问题
思路:使用两个线程调用同一静态方法(该静态方法不引用静态变量)、第一个线程被阻塞的时间大于第二个线程被阻塞的时间,若第一个线程与第二个线程的输出结果相同,则两个线程调用同一静态方法存在线程安全问题,若第一个线程于第二个线程的输出结果不同,则两个线程调用同一静态方法不存在线程安全问题;package com.shawearn.test;/** * 测试多个线程调用同一静态方法(无静态变原创 2016-10-18 01:42:22 · 2378 阅读 · 0 评论 -
Java 使用 json-lib 处理 JSON
【项目环境】 net.sf.json-lib json-lib 2.4 jdk151. JSON 数组对象转化为 List 对象;/** * JSON 数组对象转化为 Java 的 List 对象; */private void jsonArrayToList() { // JSON 格式的字符串; String jsonStr = "[{\"id\":2,\"is原创 2016-04-08 12:09:19 · 435 阅读 · 0 评论 -
DOM4J 写入 XML 文件
项目依赖: dom4j dom4j 1.6.1生成 sitemap.xml 文件:// xmlString 是符合 XML 格式的字符串;// 根据 XML 字符串生成 org.dom4j.Document 对象;Document document = DocumentHelper.parseText(xmlString);// 指定 document 字符编码;d原创 2016-04-12 14:17:23 · 445 阅读 · 0 评论 -
使用 XStream 实现 Java 对象与 XML 的相互转换
1. 初始化要转为 XML 的数据:// 生成第一条地址数据;Address address1 = new Address(1, "地址一", "广东省XX市", "XX公司");// 生成第二条地址数据;Address address2 = new Address(2, "地址二", "广东省XX市", "家");List addresses = new ArrayList();/原创 2016-04-12 14:07:46 · 460 阅读 · 0 评论 -
Spring 整合 Hibernate 时启用二级缓存
写在前面: 1. 本例使用 Hibernate3 + Spring3; 2. 本例的查询使用了 HibernateTemplate;1. 导入 ehcache-x.x.x.jar 包;2. 在 applicationContext.xml 文件中找到 sessionFactory 相应的配置信息并在设置 hibernateProperties 中添加如下原创 2016-03-24 15:54:04 · 2053 阅读 · 0 评论 -
Java 对 Properties 文件的操作
【说明】本博文为作者个人原创,转载请声明文章来源 http://blog.csdn.net/shawearn1027简介在 Java 中,我们常用 java.util.Properties.Properties 类来解析 Properties 文件,Properties 格式文件是 Java 常用的配置文件,它用来在文件中存储键-值对,其中键和值用等号分隔,格式如下:name=shaw原创 2015-11-19 16:06:13 · 611 阅读 · 1 评论