线程池
获取多线程的方法,我们都知道有三种,还有一种是实现Callable接口
实现Runnable接口
实现Callable接口
实例化Thread类
使用线程池获取
Callable接口Callable接口,是一种让线程执行完成后,能够返回结果的
在说到Callable接口的时候,我们不得不提到Runnable接口
12345678910/** * 实现Runnable接口 */class MyThread implements Runnable { @Override public void run() { }}
我们知道,实现Runnable接口的时候,需要重写run方法,也就是线程在启动的时候,会自动调用的方法
同理,我们实现Callable接口,也需要实现call方法,但是这个时候我们还需要有返回值,这个Callable接口的应用场景一般就在于批处理业务,比如转账的时候,需要给一会返回结果的状态码回来,代表本次操作成功还是失败
12345678910111213/** * Callable有返回值 * 批量处 ...
Mac微信双开
在桌面创建 wechat.sh 脚本文件,脚本内容如下
12#!/bin/bashnohup /Applications/WeChat.app/Contents/MacOS/WeChat > /dev/null 2>&1 &
打开终端,修改脚本权限
123456789101112131415161718cd ~/Desktop/ sudo chmod 777 wechat.sh```sabc<img src="/images/Mac%E5%BE%AE%E4%BF%A1%E5%8F%8C%E5%BC%80/IMG_6125-2.jpg" width="33%"/>d */public class SingletonDemo1 { public static void main(String[] args) { Singleton instance1 = Singleton.getInstance(); Singleton instance2 = Singleton.getInstance(); System.out.println(instance1 == instance2); }}class Singleton { // 1.构造器私有化,不允许外部实例化 private Singleton() { } // 2.本类内部创建对象实例 private final static Singleton ...
布隆过滤器
1、核心代码
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576public class SimpleBloomFilter { private static Logger logger = LoggerFactory.getLogger(SimpleBloomFilter.class); private static final List<Integer> SEEDS = Arrays.asList(7, 11, 13, 31, 37, 61, 67); private int defaultSize; private List<SimpleHash> functions; private BitSet bits; public static SimpleBloomFilt ...
Java8Stream流Api学习
注意:
parallelStream 并行流,线程不安全。而且执行效率要看你的电脑cup总数,默认线程数和cpu总数相当。
stream 单管,效率不及parallelStream
常见函数:
filter()、map()、flatMap()、mapToInt()、sorted()、reduce()、limit()、skip()、groupingBy()、allMatch()、findFirst()、sum()、max()、min()、average()、distinct()、count(返回流中元素个数)等……
首先我们先创建基础支撑数据。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980public class Main { public static void main(String[] args ...
SpringCloud与微服务技术栈整理
主线放这里,组件细节放单篇。
主线先串 4 个问题:
1、服务怎么注册和发现
2、请求怎么从入口网关走到下游服务
3、配置、消息队列、分布式事务分别解决什么问题
4、调用链一长之后,哪里最容易出错
注册中心Eureka 在前,Nacos 在后。
12345678spring: application: name: cloud-eureka-servereureka: client: register-with-eureka: false fetch-registry: false
细节看:
1、SpringCloud学习
2、Nacos服务
网关 Gateway 负责统一入口、路由转发、鉴权、限流、日志。
核心概念:
1、Route
2、Predicate
3、Filter
123456server.port=8181spring.application.name=service-gatewayspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848spring.clo ...
SpringCloud学习
以下为常用服务注册中间件
EurekaEureka自我保护访问Eureka主页时,如果看到这样一段大红色的句子:
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
那么表明Eureka的自我保护模式是启动的。
相反如果看见如下
THE SELF PRESERVATION MODE IS TURNED OFF. THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
那么表明Eureka的自我保护模式是关闭的
背景:正常情况下,如果Eureka Server在一定时间内(默认90秒)没有接收到某个微服务实例的心跳,Eureka Server将会移除该实例。
原理:如果在15 ...
Nginx配置
nginx.conf配置
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - ...
JVM深入浅出
JVMjdk、jre、jvm的关系jDK:是Java开发工具包,是Sun Microsystems针对Java开发员的产品。JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。JRE:是java程序的运行环境,它包含JVM。
三者的关系:JDK(JRE(JVM))
什么是JVM可以简单的理解为:就是运行编译好的java文件生成 的.class文件,并且解析为当前运行系统所对应的指令。
Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行,
粗略分来,JVM的内部体系结构分为三部分,分别是:类装载器(ClassLoader)子系统,运行时数据区,和执行引擎。
JVM 的位置在哪里?
JVM整体结构
Java代码执行流程
JVM架构图
Jvm的生命周期
类加载器类加载器子系统作用
类加载器Cla ...
Using JConsole
在多线程下,我们可以使用 JConsole 监测线程状态,如有死锁,可以快速定位。
1、在启动项目前,我们可以在idea的VM options里添加参数:
12345-Djava.rmi.server.hostname=127.0.0.1-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=9999-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false
2、找到Jdk自带的JConsole
3、使用本地进程方式连接对应启动的项目即可



