
java中多线程
科比粉丝
这个作者很懒,什么都没留下…
展开
-
voliate关键字
1.voliate简介在上一篇文章中我们深入理解了java关键字synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥妙,我们来共同探讨下.通过上一篇的文章我们了解到synchronized是阻塞同步的,在线程竞争激烈的情况下会升级为重量级锁。而voliate就可以说是java虚拟机提供的最轻量级的同步锁。但它同时...原创 2019-06-25 09:31:02 · 19318 阅读 · 5 评论 -
CyclicBarrier
CyclicBarrierCyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。 CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。 CyclicBarrier初始...原创 2019-06-26 09:29:38 · 209 阅读 · 0 评论 -
CountDownLatch
CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。public class Test002 {public static void main(String[] args) throws InterruptedExc...原创 2019-06-25 16:41:19 · 129 阅读 · 0 评论 -
ConcurrentHashMap
ConcurrentHashMapConcurrentMap接口下有俩个重要的实现 :ConcurrentHashMapConcurrentskipListMap (支持并发排序功能。弥补ConcurrentHas hMa p)ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的HashTabl...原创 2019-06-25 15:28:12 · 1282 阅读 · 1 评论 -
停止线程思路
使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。使用interrupt方法中断线程。代码:class StopThread implements Runnable {private boolean flag = true;...原创 2019-06-25 11:32:47 · 136 阅读 · 0 评论 -
Condition用法
Condition的功能类似于在传统的线程技术中的,Object.wait()和Object.notify()的功能。代码Condition condition = lock.newCondition();res. condition.await(); 类似waitres. Condition. Signal() 类似notifyclass Res {public String us...原创 2019-06-25 11:28:18 · 2543 阅读 · 0 评论 -
Lock 接口与 synchronized 关键字的区别
Lock 接口可以尝试非阻塞地获取锁 当前线程尝试获取锁。如果这一时刻锁没有被其他线程获取到,则成功获取并持有锁。Lock 接口能被中断地获取锁 与 synchronized 不同,获取到锁的线程能够响应中断,当获取到的锁的线程被中断时,中断异常将会被抛出,同时锁会被释放。Lock 接口在指定的截止时间之前获取锁,如果截止时间到了依旧无法获取锁,则返回。...原创 2019-06-25 11:00:47 · 287 阅读 · 0 评论 -
Lock锁
在 jdk1.5 之后,并发包中新增了 Lock 接口(以及相关实现类)用来实现锁功能,Lock 接口提供了与 synchronized 关键字类似的同步功能,但需要在使用时手动获取锁和释放锁。Lock写法Lock lock = new ReentrantLock();lock.lock();try{//可能会出现线程安全的操作}finally{//一定在finally中释放锁/...原创 2019-06-25 10:46:10 · 160 阅读 · 0 评论 -
wait与sleep区别
对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对...原创 2019-06-25 10:41:48 · 193 阅读 · 0 评论 -
wait()、notify、notifyAll()方法
wait()、notify()、notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态。这三个方法最终调用的都是jvm级的native方法。随着jvm运行平台的不同可能有些许差异。如果对象调用了wait方法就会使持有该对象的线程把该对象的控制权交出去,然后处于等待状态。如果对象调用了notify方法就会通知某个正在等待这个对象的控制权的线程可以继续运行。如果对象调...原创 2019-06-25 10:35:21 · 210 阅读 · 0 评论 -
什么是多线程之间通讯?
什么是多线程之间通讯?多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。画图演示多线程之间通讯需求需求:第一个线程写入(input)用户,另一个线程取读取(out)用户.实现读一个,写一个操作。代码实现基本实现共享资源源实体类class Res {public String userSex;public String userName;}输入线程资源cl...原创 2019-06-25 10:24:00 · 543 阅读 · 0 评论 -
AtomicInteger类的理解与使用
首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下:复制代码public class Sample1 {private static Integer count = 0;synchronized public static void increment() { count++;}}复制代码以下是AtomicInteger的:复制代码p...原创 2019-06-25 10:11:01 · 178 阅读 · 0 评论 -
Spring中@Async
Spring中@Async在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3.x之后,就已经内置了@Async来完美解决这个问题何为异步调用?在解释异步调用之前,我们先来看同步调用的定义;同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果...原创 2019-06-26 15:25:45 · 275 阅读 · 0 评论