- 博客(11)
- 收藏
- 关注
原创 验证volatile关键字不保证原子性
package com.chaohu;class MyData { volatile int num = 0; public void addPlusPlus(){ this.num++; }}/** * 验证volatile关键字不保证原子性:20个线程,每个线程对共享 * 资源的变量值加1000次,如果都是原子操作,最终结果应该是20000. * */public class Test { public static void
2021-04-28 21:16:23 114
原创 volatile关键字的可见性证明
volatile关键字是JVM提供的一种轻量级的同步机制。有主要3中特性: 1.保证可见性, 2.不保证原子性, 3.禁止指令重排(保证有序性)。下面代码用来验证volatile的可见性:package com.chaohu;import java.util.concurrent.TimeUnit;class MyData { //int number = 0; volatile int number = 0; public void ad
2021-04-28 20:57:18 176
原创 CountDownLatch复习
一、CountDownLatch是java.util.concurrent包下的一个类。二、一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。三、创建时,要给个初始值(int类型的count)。四、调用countDown()方法,递减锁存器的计数,如果计数到达零,则释放所有等待的线程。五、调用await()方法,使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。package com.chaohu;import java.util.concurren
2021-04-17 20:08:48 103
原创 读写锁分离
package com.chaohu.cache;import java.util.HashMap;import java.util.Map;import java.util.concurrent.locks.ReentrantReadWriteLock;//缓存资源类public class MyCache { public static void main(String[] args) { MyCache myCache = new MyCache();
2021-04-17 19:16:17 144
原创 数值转换问题
1.普通类型值传递2.引用类型地址传递3.String指向常量池中的package com.chaohu.interviewquestions;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;public class TransferValue { public void changeValue1(int age){ age = 30;
2021-04-17 17:16:38 202
原创 熟记的单例模式
package com.chaohu.singleton;public class Demo01 { public static void main(String[] args) { for (int i = 1 ; i <= 10 ; i++){ new Thread(new Runnable() { @Override public void run() {
2021-04-17 17:14:38 54
原创 自定义枚举类
package com.chaohu.myenum;//自定义枚举类class Season{ //1.声明Season对象的属性(private final修饰) private final String seasonName; private final String seasonDesc; //2.私有化类的构造器(保证外面不能new,从而类的对象有限且确定) private Season(String seasonName,String season
2021-04-17 17:12:53 74
原创 手写一个自旋锁
package com.chaohu.lock;import java.util.concurrent.atomic.AtomicReference;/** * 题目:实现一个自旋锁 * 自旋锁好处:循环比较获取,直到成功位置,没有类似wait的阻塞 * * 通过CAS操作完成自旋锁,A线程先进来调用mylock方法自己持有5秒钟, * B随后进来后发现当前线程持有锁,不是null。所以只能通过自选等待, * 直到A释放锁后B随后抢到。 */public class SpinLock
2021-04-17 17:08:53 66
原创 Spring整合Mybatis入门
1.创建mevan工程,打包方式为默认jar。2.导入依赖。<dependencies> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.
2021-04-15 19:25:47 74
原创 Spring Bean的初始化过程
1.创建容器。2.反射调用构造器创建实体(此时该实体还不是bean)。3.Spring会识别被配置成bean的信息,扫描注解的包。把实体对应的类信息封闭成一个BeanDefinition对象,会把这些BeanDefinition对象放入到一个Map中。会根据配置判断是否是单例,如果是单例,会放到单例池。再进行验证,最后进入依赖注入。4.set方法。5.(如果实现了BeanNameAware接口),就会调用setBeanName方法。6.(如果实现了BeanFactoryAware接口),就会调用s
2021-04-15 16:07:30 1258 1
原创 在JSP页面中使用Bootstrap
Bootstrap 是最受欢迎的 HTML、CSS 和 JS 框架,用于开发响应式布局、移动设备优先的 WEB 项目。官网:https://v3.bootcss.com/。在官网下载相应版本后,导入资源【css、js、fonts】,然后在<head></head>中写 <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <me
2021-03-20 15:38:22 2730
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人