
java
铁子哥写Java
感谢大佬们的支持。
有爱心的大佬请投币。
感谢。
展开
-
tomcat 启用https协议
记录:keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\homes\tomcat.keystore -validity 36500命令解释:使用keytool为Tomcat生成证书,假定目标机器的域名是“localhost”,keystore文件想要存放在“D:\homes\tomcat.keystore”,口令为“123123”。参数简要说明:“D:\homes\tomcat.keystore”含义是将证书文件的保存路径,证书文转载 2021-11-06 15:03:55 · 1032 阅读 · 0 评论 -
SpringBoot mybatis_plus启动报错
最近在学习 springboot mybatisplus 遇到启动报错的问题。最主要的是:<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version></dependency>引入 plus的包以后,其他的原创 2021-07-25 15:19:45 · 1958 阅读 · 0 评论 -
volatile 可见性
class Mydata { // volatile 关键字 可见性 volatile int number = 0; public void addTo60() { this.number = 60; }}/** * 1. 验证 volatile 可见性 * int number =0; number 变量之前根本没有添加 volatile关键字 */public class VolatileTest { public static原创 2021-04-27 13:44:02 · 124 阅读 · 0 评论 -
win10 查看 已经运行的端口与进程ID
win + r 进入 cmd输入: netstat -ano 显示所有端口与进程PID从任务管理器选择 详细信息 -> 寻找 PID 与 上面 进程PID 相同的进程,结束任务。原创 2021-01-18 20:22:22 · 818 阅读 · 0 评论 -
jdk8, lambda 使用
// lambda 表达式接口注解@FunctionalInterfaceinterface Foo { public int add(int x, int y); default int div(int x, int y) { System.out.println("hello, jdk8"); return x / y; }}public class LambdaDemo { public static void main(St原创 2021-01-11 11:32:44 · 113 阅读 · 0 评论 -
多线程防止虚假唤醒需要用while判断
笔记:多线程防止虚假唤醒需要用while判断,不能使用if else 判断(只限于两个线程的时候)。原创 2021-01-11 09:49:34 · 328 阅读 · 0 评论 -
java 静态代码块,代码块,构造函数执行顺序
执行顺序,静态代码块,代码块,构造函数。package com.example.test;public class Test { static { System.out.println("父类--静态代码块"); } public Test() { System.out.println("父类--构造函数"); } { System.out.println("父类--非静态代码块"); } publ原创 2020-12-28 20:51:28 · 100 阅读 · 0 评论 -
java notsafe 不安全集合解决方案
NotSafeDemo.java三种:List -> VectorList -> Collections.synchronizedListList -> new CopyOnWriteArrayListpublic class NotSafeDemo { public static void main(String[] args) {// List<String> list = new ArrayList<>();//原创 2020-12-10 10:05:43 · 517 阅读 · 0 评论 -
CAS - compareAndSet
CasDemo/** * CAS:(compareAndSet)比较并交换 * CAS -> UnSafe -> CAS底层思想 -> ABA -> 原子引用更新 -> 如何规避ABA问题 */public class CasDemo { public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicInteger(5); //原创 2020-12-09 17:43:41 · 132 阅读 · 0 评论 -
死锁
DeadLockDemo.javaclass HoldLockThread implements Runnable { private String lockA; private String lockB; public HoldLockThread(String lockA, String lockB) { this.lockA = lockA; this.lockB = lockB; } @Override publ原创 2020-12-08 23:31:34 · 87 阅读 · 0 评论 -
java 手写线程池
MyThreadPoolDemo.javapublic class MyThreadPoolDemo { public static void main(String[] args) { ExecutorService threadPool = new ThreadPoolExecutor( 2, 5, 1L, TimeUnit.SECONDS,原创 2020-12-08 22:19:40 · 159 阅读 · 0 评论 -
java 线程池 3 种方式
ThreadPoolDemo.javapublic class ThreadPoolDemo { public static void main(String[] args) { // 固定线程个数 5 个 一个线程池 5个线程// ExecutorService threadPool = Executors.newFixedThreadPool(5); // 5 个工作人员 线程// ExecutorService threadPool = Ex原创 2020-12-08 22:18:04 · 98 阅读 · 0 评论 -
java注解
PersonInfo.java@Retention(value = RetentionPolicy.RUNTIME) //反射获取信息@Target(value = {ElementType.METHOD}) //只能在方法上使用public @interface PersonInfo { String name(); int age(); String sex();}Person.javapublic class Person { @PersonInf原创 2020-12-07 15:29:59 · 80 阅读 · 0 评论 -
工厂模式
Fan.javapublic class Fan implements Usb { @Override public void service() { System.out.println("风扇开始工作..."); }}Mouse.javapublic class Mouse implements Usb { @Override public void service() { System.out.println("mous原创 2020-12-07 11:26:58 · 144 阅读 · 0 评论 -
volatile 不保证原子性,如何解决
VolatileDemo.javaclass MyData { volatile int number = 0; // 此时number前面加了 volatile 关键字, 不保证原子性 public void addPlus() { number++; }}public class VolatileDemo { public static void main(String[] args) { MyData myData =原创 2020-12-04 16:07:10 · 239 阅读 · 0 评论 -
synchronized与lock的区别
5点不同/** * 1. synchronized 关键字属于jvm层面。 底层使用 monitorexit 释放 * lock是具体类。是api层面的锁 * 2. 使用方法 * synchronized 不需要用户手动释放。代码执行完后系统会自动让线程释放对锁的占用。 * ReentrantLock 则需要用户手动释放,若没有主动释放锁,就可能导致出现死锁。需要 lock() unlock() 方法,配合 try/finally语句块来完成。 * 3. 等待是否可中断。原创 2020-12-03 19:53:16 · 88 阅读 · 0 评论 -
java Semaphore
SemaphoreDemo.javapublic static void main(String[] args) { // 可以代替 synchronized lock Semaphore semaphore = new Semaphore(6); // 模拟3个许可位置 for (int i = 1; i <= 6; i++) { new Thread(()->{ try {原创 2020-12-03 11:35:19 · 87 阅读 · 0 评论 -
java CyclicBarrier
CyclicBarrierDemo.javapublic class CyclicBarrierDemo { public static void main(String[] args) { // 6 个线程执行完以后,后面方法为执行完6个线程以后需要执行的方法 CyclicBarrier cyclicBarrier = new CyclicBarrier(6, () -> { System.out.println("###实现了。")原创 2020-12-03 10:55:56 · 78 阅读 · 0 评论 -
java CountDownLatch
结合枚举来实现这个demo的功能。枚举CountDownLatchDemo.javapublic class CountDownLatchDemo { public static void main(String[] args) { CountDownLatch countDownLatch = new CountDownLatch(6); for (int i = 1; i <= 6; i++) { new Thread(()-原创 2020-12-02 15:30:08 · 98 阅读 · 0 评论 -
java 枚举
枚举: 就是java内部的数据表ONE(1,“齐”)相当于: one表中的 id, name 两列。表名: oneid name1 齐也可以多列:id name adress age1 齐 中国中原地区 20CountryEnum.javapublic enum CountryEnum { ONE(1,"齐"), TWO(2,"楚"), THREE(3,"燕"), FOUR(4,"韩"),FIVE(5,"赵"),SIX(6,"魏");..原创 2020-12-02 15:20:12 · 144 阅读 · 0 评论 -
java 读写锁
写入的时候获取锁独占,读取的时候可以共享。ReadWriteLockDemo.java// 资源类class Mycache { // 可见,不保证原子性,禁止指令重排 private volatile Map<String, Object> map = new HashMap<>(); //读写锁 private ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock(原创 2020-12-02 14:32:39 · 162 阅读 · 1 评论 -
java 自旋锁
自旋锁,也就是一个线程在使用,另外一个线程一直在访问,知道前者访问结束释放该资源。SpinLockDemo.java// 自旋锁public class SpinLockDemo { // 原子引用线程 AtomicReference<Thread> atomicReference = new AtomicReference<>(); public void myLock() { Thread thread = Thread.curre原创 2020-12-02 11:39:27 · 139 阅读 · 0 评论 -
hashset为什么放present
public boolean add(E e) { return map.put(e, PRESENT)==null;}首先add方法返回值是boolean,表明当前添加的元素是否出现了重复,里面直接调用的map.put(k,v),put方法返回的是,如果key出现了重复,则返回上次存放的的value,并且覆盖value。假如第一次存放,put返回是null,add返回是true;元素重复,则put返回一个present对象,add返回false。...原创 2020-11-02 11:35:47 · 780 阅读 · 0 评论 -
java序列化和反序列化
概念:序列化: 将java对象转化为字节序列的过程。反序列化:将字节序列转化为java对象的过程。为什么要序列化:一方面,发送方需要把这个Java对象转换为字节序列,然后在网络上传送;另一方面,接收方需要从字节序列中恢复出Java对象。好处:一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里),二是,利用序列化实现远程通信,即在网络上传送对象的字节序列。Person类public class Person implements Serializab原创 2020-11-07 17:51:36 · 89 阅读 · 0 评论 -
创建线程的4种方式
1. 继承Thread类创建线程public class Thread1 extends Thread { public void run() { System.out.println(Thread.currentThread().getName() + " is running..."); } public static void main(String[] args) { Thread1 thread1 = new Thread1();原创 2020-11-04 17:52:10 · 169 阅读 · 1 评论 -
ArrayList和CopyOnWriteArrayList
1.ArrayList查询快而增删慢1、底层是数组,初始化大小为10 2、插入时会判断数组容量是否足够,不够的化会进行扩容3、所谓扩容就是新建一个数组,然后将老的数据里面的元素复制到新的数组里面4、移除元素的时候也涉及到数组中元素的移动,删除指定index位置的元素,然后将index+1至数组最后一个元素往前移动一格结论:ArrayList底层是数组,所以查询的时候直接根据索引可以很快地找到对应地元素,改也是如此,找到index对应元素进行替换。而增加和删除就涉及到数组元素地移动,所以会比较原创 2020-11-03 15:15:59 · 918 阅读 · 1 评论 -
Collection 与 Collections 区别
Collection是个接口,Collections是个类。。Collection 是个集合接口。Collections是个方法类,里面提供了好多静态方法,可以直接调用。Collection如下图:Collections如下:List<Integer> list = new ArrayList<Integer>();list.add(12);list.add(20);Collections.sort(list);System.out.println(list);原创 2020-10-29 20:45:22 · 168 阅读 · 0 评论 -
StringBuffer,StringBuilder线程安全如何理解
直接上代码:StringBuffer 线程安全,@Overridepublic synchronized int length() { return count; } StringBuilder 非线程安全,@Override public int lastIndexOf(String str) { return super.lastIndexOf(str); }发现了么? synchronized 是关键。...原创 2020-10-29 10:34:30 · 170 阅读 · 0 评论 -
Java中基本数据类型和包装器类型的关系
我们都知道在Java语言中,new一个对象存储在堆里,我们通过堆栈中的引用来使用这些对象;但是对于经常用到的一系列类型如int,如果我们用new将其存储在堆里就不是很有效——特别是简单的小的变量。所以就出现了基本类型,同C++一样,Java采用了相似的做法,对于这些类型不是用new关键字来创建,而是直接将变量的值存储在堆栈中,因此更加高效。有了基本类型之后为什么还要有包装器类型呢?我们知道Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我翻译 2020-09-21 10:59:07 · 92 阅读 · 0 评论 -
java 中 遍历 list 与 遍历 map
遍历 listpublic class Test{ public static void main(String[] args) { List<String> list=new ArrayList<String>(); list.add("Hello"); list.add("World"); list.add("HAHAHAHA...原创 2020-02-18 20:07:44 · 322 阅读 · 0 评论 -
idea 中 查看 类的所有方法快捷键
ctrl + o 哈哈原创 2020-02-18 19:28:04 · 9360 阅读 · 11 评论 -
JVM工作原理介绍
一、JVM的生命周期JVM实例对应了一个独立运行的java程序它是进程级别a) 启动。启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static voidmain(String[] args)函数的class都可以作为JVM实例运行的起点 b) 运行。main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM内部有两种线程:守护线程和非守...原创 2019-12-30 15:34:41 · 168 阅读 · 0 评论 -
JVM基本结构
原创 2019-12-27 17:55:46 · 118 阅读 · 0 评论 -
java 中 枚举 大括号 用法
Color.javapublic enum Color implements Info{ RED(10){ // 对应下面的抽象方法 public String getColor2(){ return "red"; } }, GREEN(20){ // 对应下面的抽象方法 public ...原创 2019-12-27 13:58:01 · 1445 阅读 · 0 评论 -
并发编程
三大特性: 可见性,原子性,有序性。volatile 保证可见性与有序性,但是不保证原子性,保证原子性需要借助 synchronized 这样的锁机制原创 2019-12-11 16:12:32 · 84 阅读 · 0 评论 -
jvm 多线程 公共变量 关键字 volatile (底层原理) 同步问题分析
1.jdk1.8 以前 是 总线加锁。性能很低。如果多个线程都用同一个变量,会锁定当前线程,直到变量从主内存修改后,再执行其它线程。2.mesi缓存。原创 2019-12-11 15:55:09 · 202 阅读 · 0 评论 -
ExecutorService 接口 的理解
1.接口 Java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行。2.一个 ExecutorService 实例特别像一个线程池。3.事实上,在 java.util.concurrent 包中的 ExecutorService 的实现就是一个线程池的实现。...原创 2019-11-07 20:37:04 · 465 阅读 · 0 评论 -
解析:init-method、afterPropertiesSet 先后顺序
使用 afterPropertiesSet 必须要实现: InitializingBean 接口配置文件:< bean name ="lifeBean" class ="research.spring.beanfactory.ch4.LifeCycleBean" init-method="initMethod">java代码public class LifeCycleBean...原创 2019-11-07 17:05:22 · 791 阅读 · 0 评论 -
idea仿照eclipse代码关键字高亮显示
下载地址:http://www.riaway.com/theme.php?page=3下载eclipse的jar包。如下导入idea:File -->Import Settings… 找到刚才下载的jar包。点击“OK”按钮。继续设置如下:Italic 斜体。Effects 下划线。根据需求修改就可以。...原创 2018-11-28 21:36:18 · 1689 阅读 · 0 评论 -
java的不合理指出整理
1.JDK 为我们提供了一个抽象类 AbstractMap ,该抽象类继承 Map 接口,所以如果我们不想实现所有的 Map 接口方法,就可以选择继承抽象类 AbstractMap 。据 java 集合框架的创始人Josh Bloch描述,这样的写法是一个失误。在java集合框架中,类似这样的写法很多,最开始写java集合框架的时候,他认为这样写,在某些地方可能是有价值的,直到他意识到错了。显...原创 2018-09-11 21:02:43 · 173 阅读 · 1 评论