2021
02-02
02-02
为什么Java volatile++不是原子性的详解
问题在讨论原子性操作时,我们经常会听到一个说法:任意单个volatile变量的读写具有原子性,但是volatile++这种操作除外。所以问题就是:为什么volatile++不是原子性的?答案因为它实际上是三个操作组成的一个符合操作。首先获取volatile变量的值将该变量的值加1将该volatile变量的值写会到对应的主存地址一个很简单的例子:如果两个线程在volatile读阶段都拿到的是a=1,那么后续在线程对应的CPU核心上进行自增当然都得到...
继续阅读 >
提到NullPointerException(简称NPE)异常,相信每个Java开发人员都不陌生,从接触编程的第1天起,它就和我们如影随形,最近处理的线上bug中,有不少都是对象没判空导致的NullPointerException异常。1.简单回顾引起NullPointerException异常的地方有很多,比如调用String的trim()方法,比如对BigDecimal进行计算时,比如将包装类型转化为基本类型时,这里简单回顾下。假设有个导入模版定义如下:packagecom.zwwhnly.springbootac...
1.CountDownLatch 1.2.示例:班长锁门问题问题描述:假如有7个同学晚上上自习,钥匙在班长手上,并且要负责锁门。班长必须要等所有人都走光了,班长才能关灯锁门。这6个同学的顺序是无序的,不知道它们是何时离开。6个同学各上各的自习,中间没有交互。假如说6个学生是普通线程,班长是主线程,如何让主线程要等一堆线程运行完了,主线程才能运行完成呢。publicclassCountDownLatchDemo{publicstaticvoidmain(String[]...
keytool是一个密钥和证书管理工具1.keytool工具位置keytool工具在JDK的安装目录的bin目录下面2.keytool工具命令展示打开命令行进入bin目录,然后输入命令keytool.exe,就能看见keytool工具支持哪些命令,如下图所示:注意下面的用法提示:使用“keytool-command_name-help”获取command_name的用法3.查看具体命令用法这里我们使用-genkeypair命令来创建密钥库,先来看看genkeypair命令的用法,如下图所示:4.新建...
昨天花了很长的时间去找pdf生成表格的代码,发现网上大家写的代码太多了,而且又没有注释,让我一个小白是完全看不懂,这就很过分了,所以秉着我们代码界共享的原则,我要把我昨天的收获分享给大家,好了废话不多说,贴代码了。1.第一步导包<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><dependency><groupId>com.itextpdf</groupId...
ps:我用的版本是7.0.5场景:左侧第一列宽度不够,导致数据换行。Tabletable=newTable(newfloat[2]);new一个Table之后,setWidthPercent()这个参数是这是所有列宽,并不能试用个别列。需要在写入数据的时候对各个列进行自定义列宽:Cellcell=newCell().setWidth(70).setBorder(Border.NO_BORDER).setHorizontalAlignment(HorizontalAlignment.RIGHT).add(newParagraph(entry.getKey()).setFont(sysFont).setFontSize(10))...
在一些业务场景中,需要生成pdf文件或者jpg图片,有时候还需要带上水印。我们可以事先用freemarker定义好html模板,然后把模板转换成pdf或jpg文件。同时freemarker模板还支持变量的定义,在使用时可以填充具体的业务数据。1、Maven导包<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE</version></parent><dependencies><!--freemarker-->...