
java
YinXinLion
这个作者很懒,什么都没留下…
展开
-
CompletableFuture的使用
Java 8 中, 新增加了一个包含 50 个方法左右的类–CompletableFuture,它提供了非常强大的 Future 的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合 CompletableFuture 的方法。优点我们可以不用再去手工维护线程,任务分配的工作我们不再关注。语义清晰,只用专注业务逻辑。/...原创 2020-05-04 13:11:31 · 285 阅读 · 0 评论 -
Future
当我们将任务放入线程池后,如果不需要获取任务结果,可以使用execute。如果需要的话,可以使用submit。线程池提交任务1.提交一个Callable任务,任务返回值通过get方法获取。2.提交Runnable任务及结果引用,任务执行结果为传入的result参数。3.提交一个Runnable任务,仅仅用于判断任务是否已经结束。深入Future // 取消任务 boolean...原创 2020-04-12 21:20:21 · 194 阅读 · 0 评论 -
Java8新特性
Java 8 :它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。新特性Lambda表达式-Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。方法引用-方法引用提供了非常有用的语法,可以直接引用已有JAVA类或对象(实例)的方法或构造器。默认方法-默认方法就是一个在接口里面有了一个实现的方法。Steam API-把真正函数原创 2017-07-24 10:06:44 · 234 阅读 · 0 评论 -
类加载器ClassLoader
class装载验证流程加载,链接(验证,准备,解析),初始化一,加载:首先取得二进制流(网络,文件等等),然后转为方法区的数据结构,并在堆中生成对应的java.lang.Class对象二,链接: 1.验证(保证文件格式,等)格式的正确性 2.准备 分配内存,并为类设置初始值(方法区中) 方法区-(类信息,常量池,静态字段,方法)加载进内存以后敲黑板~在准备阶段会为方法区属性设置初始值(为静原创 2017-07-13 21:22:51 · 386 阅读 · 0 评论 -
ArrayList源码学习
介绍ArrayList是JAVA中一个非线程安全的集合类,里头采用数组进行存储,当容量不够时可以对数组进行扩容。ArrayList的使用List<Integer> list = new ArrayList<Integer>();list.add(1);list.add(2);list.get(1);//get(int index)list.indexOf(1);//public int in原创 2017-08-09 14:22:44 · 186 阅读 · 0 评论 -
wait/notify,sleep方法
wait/notify源码wait是用来让线程等待的,并且释放锁。notify是用来唤醒等待线程的,执行完后,在同一同步队列中的等待线程开始抢占锁。监视器: monitor 锁: lock(JVM里只有一种独占方式的lock) 进入监视器: monitorenter 离开/释放监视器: monitorexit (monitorenter和monitorexit是JVM的指令) 拥有者: o原创 2017-08-15 16:58:08 · 371 阅读 · 0 评论 -
门面模式
为什么要写?工作中,可能我们本系统中用的是logback框架,然而当我们引入别人的A包时,包中的日志打印框架为log4j,导致包冲突,因此学习一下,记录一下。什么是log4j、logback、slf4j-simple框架?它们都是日志框架,拥有具体实现。log4j是apache实现的一个开源日志组件。logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的...原创 2019-01-01 20:49:41 · 697 阅读 · 0 评论 -
字符编码及URL编码问题
阅读这两篇文章搞定:懒得总结了~QAQ字符编码笔记:ASCII,Unicode 和 UTF-8http://www.ruanyifeng.com/blog/2010/02/url_encoding.html原创 2019-08-11 13:27:11 · 122 阅读 · 0 评论 -
Java分析死锁的方法
首先实现一个死锁程序。public class DeadLockSample extends Thread { private String first; private String second; public DeadLockSample(String name, String first, String second) { super(name)...原创 2019-10-10 20:55:11 · 211 阅读 · 0 评论 -
重入锁ReentrantLock
重入锁重入锁ReentrantLock,意思就是支持重进入的锁,它标识该锁能够支持一个线程对资源的重复加锁。Synchronized关键字支持隐式的重进入。ReebtrantLock可以在调用lock()方法的线程(已经获取锁),可再次调用获取锁且不被阻塞。重入锁获取锁有公平和非公平两种。//这是ReentrantLock的2个构造函数public ReentrantLock() {原创 2017-05-05 18:13:35 · 615 阅读 · 0 评论 -
排序算法之堆排序(JAVA实现)
堆排序介绍堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。堆的定义n个关键字序列Kl,K2原创 2017-04-06 20:55:55 · 556 阅读 · 0 评论 -
Redis的简单命令
Sets集合相关命令1.sadd key member放入一个成员进入指定的set集合中 sadd key member1 member2 放入多个成员到key这个set集合中 返回值是 添加的成员数量 2.scard key 获取key集合里的元素个数 3.sdiff key1 key2 获得key1中有key2中没有的元素 相当于key1-key2 4.sdiffstore key原创 2017-02-09 21:25:35 · 252 阅读 · 0 评论 -
排序算法
1.选择排序 对于一个int数组,请编写一个选择排序算法,对数组元素排序。 给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5]public class SelectionSort { public int[] selectionSort(int[] A, int n) { for(int原创 2017-02-28 23:13:37 · 212 阅读 · 0 评论 -
静态方法中使用内部类不能通过new
首先来看一下错误代码,public class TraditionalThreadSynchronized { public static void main(String[] args) { Outputer outputer = new Outputer(); new Thread(new Runnable() { @Override原创 2017-01-31 21:48:09 · 2548 阅读 · 0 评论 -
链表之K逆序
题目:有一个单链表,请设计一个算法,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点。例如链表1->2->3->4->5->6->7->8->null,K=3这个例子。调整后为,3->2->1->6->5->4->7->8->null。因为K==3,所以每三个节点之间逆序,但其中的7,8不调整,因为只有两个节点不够一组。要求:给定一个单链表的头指针head,同时给定K值,返回逆原创 2017-03-19 19:20:15 · 343 阅读 · 0 评论 -
JAVA集合HashMap源码总结
/** * Implements Map.put and related methods * * @param hash hash for key * @param key the key * @param value the value to put * @param onlyIfAbsent if true, don't change原创 2017-03-30 22:20:46 · 479 阅读 · 0 评论 -
JAVA并发编程学习笔记(一)
同步容器类(每个公有方法进行同步,每次一个线程访问容器状态)容器常见的符合操作:迭代(反复访问元素),跳转(根据指定顺序找到当前元素下一元素),条件运算(若没有则添加),当这些情况下,另一个线程并发修改容器时,可能会出现问题。public static Object getLast(Vector list){ int lastIndex = list.size() - 1; //取出最后位置原创 2017-03-30 09:43:42 · 419 阅读 · 0 评论 -
JAVA二分查找源码阅读
JAVA二分查找public static <T> int binarySearch(T[] a, int fromIndex, int toIndex,T key, Comparator<? super T> c) { //首先进行范围检查 1 rangeCheck(a.length, fromIndex, toIndex); //然后进行二分查原创 2017-03-30 10:37:44 · 590 阅读 · 0 评论 -
阅读-ThreadLocal(JAVA)
ThreadLocal其实就是一个工具类,用来操作线程局部变量。 每个线程在jvm的虚拟机里都分配有自己独立的空间,线程之间对于本地的空间是相互隔离的。那么ThreadLocal就应该是该线程空间里本地可以访问的数据了。 首先ThreadLocal有一个静态内部类ThraedLocalMap 这个Map为每个线程复制一个变量的‘拷贝’存储其中。static class ThreadLocalM原创 2017-03-23 15:35:21 · 204 阅读 · 0 评论 -
JAVA非阻塞同步算法与CAS无锁算法
JDK1.5之前靠synchronized关键字保持同步,采用独占方式访问变量 乐观锁与悲观锁 独占锁是悲观锁,然而synchronized是独占锁(悲观的),它会导致其他需要锁的线程挂起,等待那个线程释放锁 乐观锁,每次不加锁而是假设没有冲突而去完成某项操作,冲突失败则重试,直至成功。volatile 1.它保证变量修改,对于任何线程是可见的, 2.它保证 指令顺序不会重新排序,保证正确原创 2017-04-04 20:44:58 · 1681 阅读 · 0 评论 -
接触一下爬虫
1.获取baidu图片链接 首先将http响应内容测试获取到public class baidu { public static void main(String[] args) { //定义即将访问的链接 String url = "http://www.baidu.com"; //定义一个字符串用来存储网页内容 Strin原创 2016-10-12 20:29:23 · 304 阅读 · 0 评论