Java
wenhuixl
程序员
展开
-
自定义注解
自定义注解原创 2022-06-30 17:09:38 · 209 阅读 · 1 评论 -
cas 实现原理
cas 实现原理原创 2022-06-18 21:27:46 · 179 阅读 · 0 评论 -
公平锁与非公平锁
公平与非公平锁原创 2022-06-17 14:51:36 · 168 阅读 · 0 评论 -
手写线程池
public static MultipartFile base64ToMultipart(String base64) { try { String[] baseStrs = base64.split(","); Base64.Decoder decoder = Base64.getDecoder(); byte[] b = new byte[0]; decoder.decode(baseSt原创 2022-06-16 11:00:43 · 76 阅读 · 0 评论 -
ThreadLocal 使用
问题:多线程在某一时间访问到的是同一个对象class ResNumber { public int count = 0; public int getNumber() { count = count + 1; return count; }}class Mythread extends Thread { private ResNumber resNumber; public Mythread(ResNumber resN原创 2020-10-14 21:55:31 · 137 阅读 · 0 评论 -
Lock锁的简单使用
synchronized和locksynchronized: 自动的获取和释放锁synchronized(new Object()) { ...}lock:手动的获取和释放锁Lock lock = new ReentrantLock(); lock.lock(); try { ... } catch (Exception e) { e.printStackTrace(); } finall原创 2020-10-13 16:43:29 · 480 阅读 · 1 评论 -
java枚举
java枚举简单使用1.定义的常量public enum PizzaStatus { ORDERED, READY, DELIVERED; }2.枚举类型中定义属性,方法和构造函数public enum PinType { REGISTER(100000, "注册使用"), FORGET_PASSWORD(100001, "忘记密码使用"), UPDATE_PHONE_NUMBER(100002, "更新手机号码使用"); priva转载 2020-10-12 22:02:11 · 107 阅读 · 0 评论 -
Java获取对象内存地址
haseCode()方法获取并非对象内存地址hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,获取对象散列的地址,并非实际内存地址。java直接打印对象,结果是十六进制的散列地址值public class ObjectTest { public static void main(String[] args) { Object obj = new Object(); System.out.println(obj); System.原创 2020-10-09 21:50:38 · 18572 阅读 · 0 评论 -
String,StringBuffer和StringBuilder 的区别
String,StringBuffer和StringBuilder 的区别1、String 中使用 final 关键字字符数组保存字符串,对象是不可变的,也就可以理解为常量,线程安全2、StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串 char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的3、StringBuffer 对方法加了同原创 2020-10-09 15:13:02 · 193 阅读 · 0 评论 -
java中wait()和notify()使用
java中的守护块Object.wait() -挂起一个线程Object.notify() -唤醒一个线程class Source { public int count = 0; public boolean flag = false; // 是否有数据}class Producer implements Runnable { private Source source; public Producer(Source source) { th原创 2020-10-08 17:30:20 · 1361 阅读 · 1 评论 -
java使用atomic原子类
产生背景当给变量加了volatile关键字, 表示该变量对所有线程可见, 但不保证原子性.public class VolatileDemo extends Thread { public volatile static int count = 0; @Override public void run() { for(int i = 0; i < 10000; i++) { count++; } S原创 2020-10-04 21:47:02 · 824 阅读 · 0 评论 -
java volatile关键字可见性
原始代码public class VolatileDemo extends Thread { public boolean flag = true; public void setFlag(boolean flag) { this.flag = flag; } @Override public void run() { System.out.println("===start==="); try {原创 2020-10-04 20:44:57 · 133 阅读 · 0 评论 -
java使用同步代码块解决线程安全问题
模拟抢票public class TrainThread implements Runnable { public static int count = 100; @Override public void run() { while (count > 0) { synchronized (this) { System.out.println(Thread.currentThread().getNam原创 2020-09-30 20:18:56 · 168 阅读 · 0 评论 -
java 守护线程
守护线程和用户线程的区别守护线程: 为程序提供后端服务的线程成为守护线程,非守护线程运行结束时守护线程也一并结束;用户线程:用户线程和守护线程唯一的区别就是Daemon(Thread.getDaemon())为false;import static java.lang.Thread.currentThread;public class CreateRunnable implements Runnable { @Override public void run() {原创 2020-09-21 12:16:25 · 112 阅读 · 0 评论 -
springboot 异步@Async
同步代码方法类import org.springframework.stereotype.Component;/** * @author wenhui * @description * @Date 2020/1/1 */@Componentpublic class AsyncTask { public void task1() throws InterruptedEx...原创 2020-01-01 21:34:40 · 127 阅读 · 0 评论 -
SpringBoot 2 整合redis
SpringBoot 2 整合redis1.文件结构2.pom.xml配置<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></depen...原创 2019-12-29 22:07:51 · 320 阅读 · 0 评论 -
Java Socket实现多客户端
Java Socket实现多客户端实现类import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.PrintWriter;import java.net.Socket;import java.util.Arrays;import j...原创 2019-12-22 20:10:56 · 336 阅读 · 0 评论 -
java tcp socket客户端
import java.io.IOException;import java.io.InputStream;import java.net.Socket;import java.util.HashMap;import java.util.Map;/** * @author wenhui * @description TCP客户端 * @date 2019/12/19 */pu...原创 2019-12-19 16:55:22 · 187 阅读 · 0 评论 -
Java大小端数据互转
Java大小端数据互转/** * @author Created by wenhui * @description * Java大小端数据互转 * 数据是以大端模式存储的,而机器是小端模式,必须进行转换,否则使用时会出问题 * @date 2019/12/19 */public class String2Bytes { public static void main(St...原创 2019-12-19 16:40:00 · 1067 阅读 · 0 评论 -
Java的内存复制
Java的内存复制byte[] data = new byte[1024];byte[] dataNull=new byte[1024];System.arraycopy(dataNull, 0, data, 0, data.length);原创 2019-12-19 16:20:47 · 1702 阅读 · 0 评论 -
Join方法使用
Join方法使用场景:有T1,T2,T3三个线程,如何保证T2在T1执行后执行,T3在T2后执行?/** * @author wenhui * @description 有T1,T2,T3三个线程,如何保证T2在T1执行后执行,T3在T2后执行? * @Date 2019/12/15 */class T extends Thread { @Override pub...原创 2019-12-15 20:00:10 · 224 阅读 · 0 评论 -
java中xml转json
1.引入Maven依赖包<!-- json转换工具 --><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.24</version></...原创 2019-12-13 09:52:33 · 293 阅读 · 0 评论 -
Java中断线程
/** * @author wenhui * @description * @Date 2019/11/16 */class StopThread extends Thread { public boolean flag = true; @Override public synchronized void run() { while (fla...原创 2019-11-16 21:44:44 · 105 阅读 · 0 评论 -
Java多线程MQ操作
/** * @author wenhui * @description 多线程间通讯 * @Date 2019/11/3 */class Source { public String name; public int age; public boolean flag = false;}class Producer implements Runnable {...原创 2019-11-03 20:41:42 · 638 阅读 · 0 评论 -
java 线程死锁
/** * @author wenhui * @description 多线程死锁 * @Date 2019/11/3 */class DeadLock implements Runnable { private static Object obj1 = new Object(); // 静态锁对象obj1 private static Object obj2 = ne...原创 2019-11-03 10:40:30 · 84 阅读 · 0 评论 -
多线程同步
多线程同步/** * @author wenhui * @description 模拟线程不安全实例 * @Date 2019/10/26 */class TrainTicket implements Runnable { // 车票总数 private int count = 100; // 同一线程锁 private Object oj = ne...原创 2019-10-26 21:31:34 · 42 阅读 · 0 评论 -
SpringBoot 启动项目时自动执行方法
继承 CommandLineRunner/** * author: wenhui * date: 2019-07-30 14:15 **/@EnableEurekaClient@EnableDiscoveryClient@SpringBootApplicationpublic class TCPSocketApplication implements CommandLineRunn...原创 2019-10-16 17:00:03 · 258 阅读 · 0 评论 -
通过Java反射获取对象属性名及对应值
通过Java反射获取对象属性名及对应值import lombok.Data;/** * @author wenhui * @description * @Date 2019/10/13 */@Datapublic class Bean { private String userName; private String userId; private ...原创 2019-10-13 18:40:35 · 1491 阅读 · 1 评论 -
实现Runnable接口创建线程
实现Runnable接口创建线程/** * @author wenhui * @description 实现CreateRunnable接口创建线程 * @Date 2019/10/13 */public class CreateRunnable implements Runnable { @Override public void run() { f...原创 2019-10-13 16:15:53 · 554 阅读 · 0 评论 -
继承Thread类创建线程
继承Thread类创建线程/** * @author wenhui * @description 继承Thread类创建线程 * @Date 2019/10/6 */public class CreateThread extends Thread { @Override public void run() { for (int i = 0; i <...原创 2019-10-13 15:17:59 · 346 阅读 · 0 评论 -
Java 内部类使用
/** * @author wenhui * @description 内部类使用 * @Date 2019/10/6 */public class Outer { private String out_string = "out_string"; class Inner { public void print() { Sys...原创 2019-10-06 16:40:21 · 83 阅读 · 0 评论 -
JVM 参数调优
JVM 参数调优启动命令:java -server -Xms32m -Xmx32m -jar maven_demo-1.0-SNAPSHOT.jar查看进程信息:原创 2019-07-15 22:15:08 · 149 阅读 · 0 评论 -
Java 配置环境变量
Java 配置环境变量1.找到jdk和jre安装目录2.设置环境变量a.新建系统变量JAVA_HOME变量名:JAVA_HOME变量值:D:\Program Files\Java\jdk1.8.0_211b.编辑系统变量PATH变量名:PATH变量值:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;c.新建系统变量CLASSPATH变量名:PA...原创 2019-05-22 22:42:45 · 123 阅读 · 0 评论