![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
潇洒小燕青
追求卓越,是一种态度
展开
-
Java使异步变同步的方法
使用CountDownLatch,在获取结果时使用await方法,在设置结果的时候使用countDown方法。这样就可保证获取方法阻塞住,直到结果被计算出来。使用futureTask加上executor进行异步任务...原创 2019-11-23 12:26:44 · 518 阅读 · 0 评论 -
Java集合系列
Java中的线程安全的集合Vector(可自动增长的array):线程安全版的ArrayListHashTable:线程安全版的HashMapStack:继承自Vector,因此也是线程安全的如何线程安全的访问集合?什么是fail-fast机制? * <p>The iterators returned by the {@code iterator} meth...原创 2019-08-05 16:22:07 · 126 阅读 · 0 评论 -
Java基础---为什么我们需要并发集合?
As we already know Collections which is nothing but collections of Objects where we deals with the Objects using some pre-defined methods. But There are several problems which occurs when we use Colle...原创 2019-08-05 20:14:39 · 127 阅读 · 0 评论 -
什么是CheckedException?
The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.The class Exception and any subclasses that are not also sub...原创 2019-08-05 21:59:04 · 1441 阅读 · 0 评论 -
Java并法包--Future,FutureTask,Callable,Executors
因为这几个类比较简单,所以简单进行文字陈述。Future:A Future represents the result of an asynchronous computation. Methods are provided to check if the computation is complete, to wait for its completion, and to retrieve t...原创 2019-08-05 22:53:31 · 99 阅读 · 0 评论 -
Java并法包--ConditionObject?
什么是ConditionObject?ConditionObject是java.util.concurrent.lock包中的类,它的出现是Java中的并发编 程变得更加高效。以下为方便简称ConditionObject为CO。在使用java内置的sychronized关键字来同步的时候我们会使用wait和notify方法,这个与CO的底层实现是一致的,只是没有暴漏在Java层。简单的说CO...原创 2019-08-08 20:10:10 · 228 阅读 · 0 评论 -
Java并发包--什么Guard-suspend Pattern?
看门见山,下面就是经典的Guard-Suspend Partern模式的代码:while(condition is not satisfied){ obj.wait()}Guard-suspend模式常用于线程之间的同步,使用这种方式可以防止循环检测,线程可以被动唤醒,唤醒之后还可以再次检查suspend的条件,防止条件失效。...原创 2019-08-08 20:15:30 · 198 阅读 · 0 评论 -
Java并发包---forkjoin-RecursiveAction
RecursiveAction继承自ForkJoinTask,代表一个异步执行的结果,是没有返回值的任务。而RecursiveTask是有返回值的任务,这两个共同组成ForkJoin框架的任务。一个简单的例子以下是java API中给出的RecursiveAction的例子,将给定数组的每个元素都自增:public class IncrementTask extends Recursive...原创 2019-08-06 22:50:02 · 685 阅读 · 0 评论 -
Java并发包--fork/join--RecursiveTask
以下是使用RecursiveTask解决计算斐波那契数的程序。 class Fibonacci extends RecursiveTask<Integer> { final int n; Fibonacci(int n) { this.n = n; } Integer compute() { if (n <= 1) return n;...原创 2019-08-06 23:01:39 · 244 阅读 · 0 评论 -
在Java集合中什么是结构性的修改?
原文出处(ArrayList的实现文档中)结构性的改变是一种操作:添加,删除一个或者多个元素,或者明显的重新调整所背后的数组的大小;仅仅修改元素的内容并不叫结构性修改结构性的改变通常通过一些线程安全的对象来完成,这些对象对线程安全的集合进行了包装,使结构性改变的方法变得线程安全(用锁的方式或者其他方式)。Note that this implementation is not synchro...原创 2019-08-10 16:24:12 · 618 阅读 · 0 评论 -
Java中的同步集合
List list = Collections.synchronizedList(new ArrayList(...));synchronized(list){ Iterator itr = list.iterator(); while(itr.hasNex()){ …… }}以上是Java中同步集合的使用,同步集合的缺点很明显,就是不高效。具体看实现我们发现只是用装饰者模式...原创 2019-08-10 16:31:10 · 472 阅读 · 0 评论 -
Java并发包中的并发集合 vs 同步集合
java并发包中的并发集合与sychronized collection的不同之处在于:并发包中的集合是线程安全的,但是不是通过一个互斥锁即synchronized来实现线程安全的,这使得他们比synchronized 集合更加高效。并发包中的集合通过定义happens-before机制很好的实现线程安全。Happens-before就是一个代码块中的写操作对于后续代码块中的读,写,删除是...原创 2019-08-10 21:31:14 · 296 阅读 · 0 评论 -
Java并发包中的CopyOnWriteXXXX集合特点
下面以CopyOnWriteArrayList为例子来说明CopyOnWrite集合的特点:A thread-safe variant of java.util.ArrayList in which all mutative operations (add, set, and so on) are implemented by making a fresh copy of the underly...原创 2019-08-10 21:51:07 · 134 阅读 · 0 评论 -
Queue和Deque的区别?
Queue是队列,Deque是双端队列。public interface Deque<E> extends Queue<E> {方法上的区别如下:QueueDequeaddaddFirstofferofferFirstremoveremoveFirstpollpollFirstelementgetFirst...原创 2019-08-10 22:07:39 · 6873 阅读 · 0 评论 -
Java并发之对于CountDownLatch的理解?
学习一个东西,一定要高搞清楚使用的场景,并总结最佳实践。CountDownLatch 是Java并发包中的一个同步助手类,用于协调多个线程之间的协作。当初始化的参数为1的时候可以作为一个开关latch,但是注意,这个开关可以开启多个线程,或者是只开启一个线程。latch.await()在多个线程中,先暂停等待。latch.countDown()在一个线程中等待时机调用,之后所有等待的其他...原创 2019-08-10 23:00:17 · 141 阅读 · 0 评论 -
Java并发包-CyclicBarrier
Cyclic用于线程之间的同步,形象化一点就是说,大家都到达了再继续运行,相对于CountDownLatch来说,它可以被重用,因为在await到达之后,count会被自动重新初始化。CyclicBarrier中有两个方法需要注意:await用于使所有的线程同步到一个点上进行等待,如果要进行下一步,所有的线程一定是在程序中的某一点都在等待,而CountDownLatch就不能保证在同一...原创 2019-08-11 23:00:44 · 143 阅读 · 0 评论 -
Gradle中的api和implementation的区别
api 和 implementaion主要是解决多个module依赖时的重复编译问题。设想我们有如下的结构app -> lib1 -> lib2即app依赖于lib1,而lib1 则依赖于lib2.如果我们在app的gradle的依赖中加入api lib1 or implementation lib1而在lib1中使用api lib2那么如果lib2有了改变,则会导致a...原创 2019-05-27 06:32:04 · 5691 阅读 · 0 评论 -
Redis的特点
在上一节,用JavaFX简单的搭建了一个应用,这一节我们引入Redis数据库。首先在使用之前,要对redis数据库有大致的了解,方便以后进行深入研究。所以Redis最大的特点就是高效,功能丰富。下一节我们将Redis引入之前的demo程序中,加上数据库的功能。...原创 2019-05-26 11:40:13 · 223 阅读 · 0 评论 -
一个完整的JavaFx应用例子
在Java的官方文档中可以看到是推荐使用Scene Builder的。这说明用sencebuilder来进行布局的构建是很有效率的。从这里,我们可以直接下载SceneBuilder。这里是如何关联SceneBuilder和IDEA开发环境。具体如何使用请查看相关文档,有具体的使用方法。在配置完以后,就可以使用了,因为是可见的拖拽方式,所以布局很方便。这里需要注意的是,我们一定要参考官方...原创 2019-05-26 10:06:20 · 9987 阅读 · 0 评论 -
Volatile关键字的最佳实践
本文主要总结常用的volatile方式。1. 循环检测(单纯写,单纯读,不涉及变量的复杂操作) private volatile boolean stop = false; // 执行在多个线程中 void doSomeWork() { while (!stop){ //do stuff } } ...原创 2019-04-19 08:31:51 · 193 阅读 · 0 评论 -
Java并发包--可重入锁ReentrantLock
引入原因Java中可重入锁Lock的实现可以替代synchronized的功能,同时也解决了synchronized 关键字的无法回退(只能死等锁)的问题,即本文中讨论的锁的尝试取消。不仅如此,Lock使用起来更加灵活方便。Lock的实现tryLock尝试获取锁,返回false如果获取锁失败;经典实践如下: if (lock.tryLock()) {...原创 2019-04-25 08:40:46 · 152 阅读 · 0 评论 -
问渠那得清如许,唯有源头活水来
Java基础的源头就在这里。是技术,就要经过刻苦的练习才能透彻的掌握,此外无捷径。抛却一切浮躁,追溯源头,自然清静。原创 2019-05-20 12:25:18 · 190 阅读 · 0 评论 -
Java中的注解是什么?
Java中的注解是什么呢?简单来说注解就是一种形式的元数据,这样的数据类型可以用来标记代码(类,包,方法,成员变量等),从而在编译或者运行阶段辅助运行。以下就是注解概念框架,来源是官方文档教程。...原创 2019-05-20 21:03:32 · 4455 阅读 · 1 评论 -
一张图了解Java注解概念框架
以下是根据官方教程文档总结的Java注解概念思维框图:带着框架来学习实践,让知识烙印在脑海中!原创 2019-05-20 21:52:46 · 272 阅读 · 1 评论 -
学习Java FX 你需要掌握那些方面?
在上一节我决定要学习并系统整理JavaFX 相关的知识。学习JavaFX 正确的思路是什么呢?我们先来进行一个抽象,什么是JavaFX?实际上就是一组UI布局空间集合而已,那如何学习呢?根据我多年Android app开发经验,只要是关于UI,我们必须要掌握的有:JavaFx 教程Java8Doc文档...原创 2019-05-26 09:47:01 · 387 阅读 · 0 评论