多线程
WQ同学
这个作者很懒,什么都没留下…
展开
-
异步处理rest服务-多线程提升rest性能
1 异步处理的优点异步编程最大的特点是吞吐量大,延迟小,因为没有堵塞,这就容易挖掘现有硬件和操作系统等底层系统的潜力,同样的成本投入,异步系统要比传统铁板一块的同步系统更能应付爆发式涌潮的瞬间大流量 传统处理流程: 异步处理流程: 在tomcat 线程池中线程的数量的有限的,是线程达到上限请求就没法处理了。使用异步处理的话,主线程就可以空闲下来处理其他请求这样,服务器的吞吐量就...原创 2017-10-29 12:06:56 · 8011 阅读 · 0 评论 -
多线程和并发库应用十一-读写锁
上节中提到锁的运用,但在在实际情况中读写操作全部都互斥的话太影响效率了于是jdk 提供了一种机制读写锁下面给出一个缓存的例子。public class Main { Map<String,User> map=new HashMap<String,User>(); ReadWriteLock rw=new ReentrantReadWriteLock(); public Us转载 2018-01-09 23:25:09 · 2707 阅读 · 0 评论 -
多线程和并发库应用十七-阻塞队列
阻塞队列,顾名思义,首先它是一个队列,通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出; 常用的队列主要有以下两种:(当然通过不同的实现方式,还可以延伸出很多不同类型的队列,DelayQueue就是其中的一种) 先进先出(FIFO):先插入的队列的元素也最先出队列,类似于排队的功能。从某种程度上来说这种队列也体现了一种公平性。 后进先出(LIFO):后插入队列的元素最先转载 2018-01-16 21:10:35 · 2744 阅读 · 0 评论 -
多线程和并发库应用九-callable
本节主要讲下 Callable和Future 的使用它俩很有意思的,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值,下面来看一个简单的例子:pu原创 2018-01-06 22:44:16 · 2709 阅读 · 0 评论 -
多线程和并发库应用八-线程池
Java通过Executors提供几种线程池,主要有: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来原创 2018-01-06 21:58:25 · 2980 阅读 · 0 评论 -
多线程和并发库应用十六-Exchanger
用于线程之间的数据交换,线程完成一定的数据后项目其他线程进行数据交换。第一个先拿出数据等到第二个线程执行完成后进行数据交换。public class ExchangerTest { public static void main(String[] args) { ExecutorService service = Executors.newCachedThreadPool();原创 2018-01-15 23:21:01 · 2707 阅读 · 0 评论 -
多线程和并发库应用十五-CountDownLatch
CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能,当计数为0后 则执行public class CountdownLatchTest { public static void main(String[] args) { ExecutorService service = Executors.newCachedThr原创 2018-01-15 23:09:35 · 2718 阅读 · 0 评论 -
多线程和并发库应用十四-CyclicBarrier
字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。 public class Main { public static void main(String[] args){原创 2018-01-15 22:53:43 · 2714 阅读 · 0 评论 -
多线程和并发库应用十三-Semaphore
一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。拿到信号量的线程可以进入代码,否则就等待。通过acquire()和release()获取和释放访问许可。原创 2018-01-15 22:27:15 · 2692 阅读 · 0 评论 -
多线程和并发库应用七-线程间数据共享2
上两篇讲到了数据共享的方式本篇主要一个小题目来巩固一下 假设有4个线程两个要对j加1 ,两个要对j 减1 两种方式实现线程的数据共享 1. 将共享数据封装在另一个对象中,然后将这个对象逐一传递给各个Runable 对象。每个线程对共享数据的操作也分配到那个对象中去完成。这样容易实现针对该数据进行的各个操作的互斥和通信。public class ThreadShareData { p原创 2018-01-06 20:39:57 · 2742 阅读 · 0 评论 -
多线程和并发库应用六-ThreadLocal
上文中使用一个hashmap 来实现线程间的数据共享其实jdk 已经实现了一个这样的类ThreadLocal原创 2018-01-06 19:32:27 · 2823 阅读 · 0 评论 -
多线程和并发库应用五-线程间数据共享
本章主要讲述线程之间怎么实现数据共享原创 2018-01-06 18:22:35 · 2750 阅读 · 0 评论 -
多线程和并发库应用四-传统线程通信
本节通过一个案例来实现线程之间的通信。 现在有一个需求需要子线程循环10次,主线程循环100次,子线程循环10次,主线程循环100次,依次往复50次。。。。原创 2018-01-06 17:26:39 · 2743 阅读 · 0 评论 -
多线程和并发库应用十二--Condition
我们知道在线程的同步时可以使一个线程阻塞而等待一个信号,同时放弃锁使其他线程可以能竞争到锁。在synchronized中我们可以使用Object的wait()和notify方法实现这种等待和唤醒,但是在Lock中怎么实现这种wait和notify呢?答案是Condition 前面用等待唤醒的方式实现了a调用10次b调用20次,a调用10次b调用20次 重复50次。那么a 调用10次 b调用2原创 2018-01-15 21:28:29 · 2732 阅读 · 0 评论 -
多线程和并发库应用三线程互斥
当使用多线程的时候很容易发生一个问题就是类似与银行转账的问题假设路人A在银行有100快他同时转两笔80快如果不做任何的操作两笔80很容易直接转账成功就相当于取了160快。原创 2018-01-06 14:51:09 · 2713 阅读 · 0 评论 -
多线程和并发库应用一传统定时器
在 jdk 1.5 前使用定时器。主要通过Timer 和TimerTask原创 2018-01-06 10:46:28 · 2740 阅读 · 0 评论 -
实现一个线程安全和非线程安全的程序计数器
JVM中的CAS操作正是利用了处理器提供的CMPXCHG指令实现的。自旋CAS实现的基本思路就是循环进行CAS操作直到成功为止,以下代码实现了一个基于CAS线程安全的计数器方法safeCount和一个非线程安全的计数器count。public class SafeCountDemo { private AtomicInteger atomicI = new AtomicInteger(0)转载 2017-12-06 13:03:44 · 3520 阅读 · 0 评论 -
Java多线程中join方法的理解
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。 //例如 t.join(); //使调用线程 t 在此之前执行完毕。 t.join(1000); //等待 t 线程,等待时间是1000毫秒 下面通过一个例子介绍一下 public class C原创 2017-12-06 10:30:03 · 2874 阅读 · 0 评论 -
一道超难的面试题
文章地址:http://www.haha174.top/article/details/259582 题目如下: static class TestSync2 implements Runnable { int b = 100; synchronized void m1() throws InterruptedException { ...转载 2018-03-07 22:59:18 · 2795 阅读 · 0 评论