Java
文章平均质量分 56
好马行千里
这个作者很懒,什么都没留下…
展开
-
修改文件和文件名
package jvmTest;import java.io.File;public class FileRename { private static void testRenameFile(String filePath) { try { File rootFile = new File(filePath); File[] files = rootFile.listFil...原创 2018-04-17 14:44:29 · 307 阅读 · 0 评论 -
CompletableFuture
Future有一定的局限性,无法实现某些场景的异步处理将两个异步计算合并为一个(这两个异步计算之间相互独立,同时第二个又依赖于第一个的结果). 等待Future集合中的所有任务都完成. 仅等待Future集合中最快结束的任务完成(有可能因为它们试图通过不同的方式计算同一个值),并返回它的结果. 通过编程方式完成一个Future任务的执行(即以手工设定异步操作结果的方式). 应对Futu...原创 2019-05-13 10:02:44 · 134 阅读 · 0 评论 -
Executor框架学习
Executor:接口,只定义了一个接收Runnable对象的方法executor。void execute(Runnable command);ExecutorService:是Executor的扩展接口,增加了生命周期管理的方法,一个异步Task执行状况返回Future的方法,以及多个Task集合的方法。void shutdown();List&l...原创 2018-04-16 11:13:56 · 265 阅读 · 0 评论 -
volatile
volatile的作用:可见性 防止重排序。Java语言规范定义:Java语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。排他锁(X锁):线程给A上锁,只允许A读和写,直到释放锁(更删查都不允许)。 共享锁(S锁):线程给A上锁,其他线程只能加S锁,不能加X锁(读取)。在程序运行中,会将运行所需要的数据复制一份到CPU高速...原创 2018-04-28 07:56:56 · 118 阅读 · 0 评论 -
synchronized
普通同步方法,锁是当前实例对象 静态同步方法,锁是当前类的class对象 同步方法块,锁是括号里面的对象一个线程访问同步代码块时,它首先是需要得到锁才能执行同步代码,当退出或者抛出异常时必须要释放锁。同步代码块是使用monitorenter和monitorexit指令实现的,monitorenter指令插入到同步代码块的开始位置,monitorexit指令插入到同步代码块的结束和...原创 2018-04-28 09:21:11 · 166 阅读 · 0 评论 -
禁止指令重排序
volatile的有序性是使用内存屏障实现的,它能禁止指令重排序。在执行程序时为了提高性能,编译器和处理器通常会对指令做重排序:编译器重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序; 处理器重排序。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序;指令重排序对单线程没有什么影响,他不会影响程序的运行结果,但是会影响多线程的正确性,那么我们就需要禁...原创 2018-04-28 12:36:02 · 4900 阅读 · 0 评论 -
Lock锁相关以及AQS
Lock锁的使用 Lock lock = new ReentrantLock(); lock.lock(); try { // TODO } finally { lock.unlock(); }这边锁的核心在于AQS(AbstractQueuedSynchronizer抽象队列同步器)AQS基本方法private volatile...原创 2019-03-14 11:08:57 · 123 阅读 · 0 评论 -
线程池学习
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ...原创 2019-03-19 20:01:30 · 175 阅读 · 0 评论 -
AbstractQueuedSynchronizer笔记
Node的几个状态描述 volatile int waitStatus; // 表示线程已取消 static final int CANCELLED = 1; // 后继者的线程需要唤起 static final int SIGNAL = -1; // 线程在等待条件 static final int CONDITION = -2; // 下一个acquireShared应无条...原创 2019-04-02 21:01:02 · 109 阅读 · 0 评论 -
aqs学习
aqs是一个很重要的并发框架,熟悉之后可以很方便的构造自己的并发工具。aqs核心在于一个acquire方法。public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)){ selfInterr...原创 2019-04-26 15:02:32 · 263 阅读 · 0 评论 -
阿里P7
一、基础篇JVMJVM内存结构堆、栈、方法区、直接内存、堆和栈区别Java内存模型内存可见性、重排序、顺序一致性、volatile、锁、final垃圾回收内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定 JVM参数及调优Java对象模型oop-klass、对象头HotSpot即时编译器、编译优化类加载机制classLoad...原创 2018-09-12 09:46:09 · 2528 阅读 · 0 评论 -
Linux发送Http请求
curl -l -H "Content-type: application/text" -X POST -d '[msg]' [URL]原创 2018-08-03 14:26:51 · 889 阅读 · 0 评论 -
JDK 8 函数式编程入门
JDK 8 函数式编程入门1. 概述1.1 函数式编程简介我们最常用的面向对象编程(Java)属于命令式编程(Imperative Programming)这种编程范式。常见的编程范式还有逻辑式编程(Logic Programming),函数式编程(Functional Programming)。函数式编程作为一种编程范式,在科学领域,是一种编写计算机程序数据结构和元素的方式,它把计算过程当做是数...转载 2018-06-19 10:21:26 · 180 阅读 · 0 评论 -
ConcurrentModificationException
public class ConcurrentModificationExceptionDemo { Vector<String> v = new Vector<String>(); public ConcurrentModificationExceptionDemo() { v.add("1"); v.add("2"); v.add("3"); v....原创 2018-05-19 23:06:24 · 157 阅读 · 0 评论 -
基于wait-notify的BlockingQueue
public class MyBolckingQueue { private LinkedList<Object> list = new LinkedList<Object>(); private AtomicInteger length = new AtomicInteger(0); private int max; private int min = 0; ...原创 2018-05-19 21:32:18 · 158 阅读 · 0 评论 -
Java常用符号
public static void main(String[] args) { System.out.println("java版本号:" + System.getProperty("java.version")); // java版本号 System.out.println("Java提供商名称:" + System.getProperty("java.vendor")); // ...原创 2018-05-18 09:47:49 · 1570 阅读 · 0 评论 -
Spring Bean的注册
Bean的定义开始介绍:BeanFactory是最顶层的接口,它定义了IOC容器的基本功能规范,可以看到xml配置中的某些属性了,比方说单例,多例,类型匹配,别名等。BeanFactory有三个子类:ListableBeanFactory、HierarchicalBeanFactory和AutowireCapableBeanFactory。每个接口都有各自的定义,它主要是为了区分在Spring内部...原创 2018-04-26 18:01:26 · 1187 阅读 · 0 评论 -
HashMap学习(一)
先看JavaDoc,我先翻译如下:基于HashTable的Map接口的实现,HashMap提供了所有的Map接口定义的操作,并允许null值和null键。HashMap类大致等同于HashTable,除了它是不同步的,并且允许空值,HashMap不保证Map的顺序;特别是它不能保证该顺序将随时间保持不变。HashMap的基本操作(get和put)提供恒定的时间性能,假设hash函数将各个桶中的元素...原创 2018-05-03 19:03:48 · 263 阅读 · 0 评论 -
Java 格式化 XML
项目中会有XML报文,格式化后便于查看import com.sun.org.apache.xml.internal.serialize.OutputFormat;import com.sun.org.apache.xml.internal.serialize.XMLSerializer;import org.w3c.dom.Document;import org.xml.sax.Inp...原创 2019-07-25 15:46:25 · 2782 阅读 · 1 评论