java基础
-墨倾池-
这个作者很懒,什么都没留下…
展开
-
idea启动java进程 -classpath 如何设置
在启动java进程执行对应的程序的时候,需要先去指定jvm加载依赖的路径。命令行执行的时候可以通过 java -classpath来执行。在idea执行运行的时候是从如何设置的呢?当项目被mavn编译完成后,会降所有的依赖放在External Libraries下面,所以执行idea启动main函数的时候会默认将 External Libraries下面的jar作为classpath。System.getProperty(“java.class.path”)可以查询classpath下面的内容。原创 2023-03-14 16:43:25 · 2414 阅读 · 0 评论 -
CopyOnWriteArrayList设计原理
前言CopyOnWriteArrayList是jdk包中提供的一个集合容器,基础能力和ArrayList相同。但是ArrayList是线程不安全的,在并发场景无法使用。CopyOnWriteArrayList是一个线程安全的集合类,那么它是如何做到线程安全的呢?我们一起探究一下CopyOnWriteArrayList的基础实现。设计原理CopyOnWriteArrayList底层通过读写分离来保证线程安全,其底层数组和ArrayList一样放在数组里面,我们称这个为原数组,读的请求都会去原数组查找数据原创 2021-08-21 22:53:37 · 201 阅读 · 0 评论 -
guava Stopwatch
guava提供了Stopwatch用于计算程序执行中的时间消耗。那么为什么需要这个类了?我们首先看看通常我们是如何计算时间消耗的。 long start = System.nanoTime(); Uninterruptibles.sleepUninterruptibly(2, TimeUnit.SECONDS); System.out.println("耗时:" + (System.nanoTime() - start));如果使用Stopwatch应该如原创 2021-05-13 12:50:40 · 476 阅读 · 0 评论 -
Uninterruptibles.sleepUninterruptibly
今天在看guava RateLimit源码的时候发现在操作线程sleep的时候写法和之前不一样,于是进去一探究竟。 @Override void sleepMicrosUninterruptibly(long micros) { if (micros > 0) { Uninterruptibles.sleepUninterruptibly(micros, MICROSECONDS); } }原创 2021-05-12 09:58:11 · 1512 阅读 · 0 评论 -
RandomAccess接口
RandomAccess原创 2021-03-10 17:04:24 · 134 阅读 · 0 评论 -
hystrix 源码学习
demo 演示 @HystrixCommand( groupKey = "thread-control1", fallbackMethod = "failback", commandProperties = { @HystrixProperty(name = "execution...原创 2019-09-12 13:39:02 · 165 阅读 · 0 评论 -
inputStream源码解读
源码分析inputstream是很多io流操作的父类,其主要提供以下两个方法/** * 读取一定长度的数据到数组 */public int read(byte b[], int off, int len) throws IOException ;/** * 读取一个字节数组,内部实现是调用上一个方法 */public int read(byte b[]) throws IOExc...原创 2019-09-08 22:22:59 · 206 阅读 · 0 评论 -
java 常用文件读写代码块
文件读取获取classloader加载的文件// 从类加载器中获取文件,jar包类的文件也会被加载到类加载器InputStream inputStream = this.getClass().getResourceAsStream("/source.txt");// BufferedInputStream 通过装饰器的方式操作InputStreamBufferedInputStream...原创 2019-09-08 22:24:14 · 244 阅读 · 0 评论 -
java.util.stream.Stream#collect学习
首先看一下下面这段代码通常我们需要将一个list按照一定的规则聚合成一个map的时候,我们会这么写 Map<Long,Person> map = new HashMap<>(); for(Person person:testList) { map.put(person.id,person); }但...原创 2019-09-01 16:06:17 · 513 阅读 · 0 评论 -
线程池的状态
线程池的几种状态 private static final int COUNT_BITS = Integer.SIZE - 3; private static final int RUNNING = -1 << COUNT_BITS; private static final int SHUTDOWN = 0 << COUNT_BITS;...原创 2019-06-11 17:00:35 · 284 阅读 · 1 评论 -
参数传递解析
在使用java撸代码的时候大家是否想过这样一个问题,java代码执行过程中调用其它方法的时候参数传递是如何实现的呢?我们知道java在执行一个方法内的代码时会将方法内的数据加载到线程的工作内存。如果是基础类型数据则直接存放其value,如果是对象的引用,则存放的是对象的地址。这里需要了解对象的创建过程。如下图所示,我们创建一个Person对象a虽然只有一行代码,但是却分了三个步骤,创建Per...原创 2020-10-19 16:45:53 · 169 阅读 · 0 评论 -
Callable和Feature原理分析
Callable和Future原理分析Runnable & Callablejava提供两种线程实现方式Runnable和Callable。Runnable线程提交后没有返回值,主线程无法感知线程的执行结果。Callable提供返回值,通过Future的回调模式实现对线程计算结果的监听。那么Future是如何做到这一点的呢,下面通过源码分析一探究竟。举个例子 public ...原创 2019-05-10 00:19:07 · 767 阅读 · 0 评论 -
学习java steam
前言开发中喜欢使用stream的模式去处理数据流,因为其结合lambda让代码更加简洁,Stream的数据处理函数名也让代码的逻辑一目了然。抽象模型介绍Streamstream接口是数据流转各节点的抽象,下面是stream的部分方法public interface Stream<T> extends BaseStream<T, Stream<T>> {...原创 2020-10-19 16:46:35 · 327 阅读 · 1 评论 -
java.net.SocketException: No buffer space available (maximum connections reached?): connect 问题分析
异常日志 Caused by: java.net.SocketException: No buffer space available (maximum connections reached?): connect at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method) at java.net.原创 2018-02-05 13:44:43 · 16388 阅读 · 5 评论 -
关于工厂模式和建造者模式的理解
通常情况下java里面创建一个对象都是直接使用new关键字,但是随着对java理解的深入逐渐会接触到设计模式,设计模式中关于对象创建的模式主要有两种:工厂模式和建造者模式,在这篇博文中来探讨一下这三种创建对象方式的理解,不当之处,望大家指正。 一、使用new关键字直接创建 假设我们有一个car类public class Car{ private String name; publ原创 2017-12-26 23:42:31 · 439 阅读 · 0 评论