
线程
WQ同学
这个作者很懒,什么都没留下…
展开
-
多线程和并发库应用一传统线程创建
众所周知创建线程主要有两种方式一种是继承Thread 类一种是实现Runnable接口原创 2018-01-05 23:53:22 · 2790 阅读 · 0 评论 -
多线程和并发库应用十七-阻塞队列
阻塞队列,顾名思义,首先它是一个队列,通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出; 常用的队列主要有以下两种:(当然通过不同的实现方式,还可以延伸出很多不同类型的队列,DelayQueue就是其中的一种) 先进先出(FIFO):先插入的队列的元素也最先出队列,类似于排队的功能。从某种程度上来说这种队列也体现了一种公平性。 后进先出(LIFO):后插入队列的元素最先转载 2018-01-16 21:10:35 · 2773 阅读 · 0 评论 -
多线程和并发库应用九-callable
本节主要讲下 Callable和Future 的使用它俩很有意思的,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值,下面来看一个简单的例子:pu原创 2018-01-06 22:44:16 · 2731 阅读 · 0 评论 -
多线程和并发库应用八-线程池
Java通过Executors提供几种线程池,主要有: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来原创 2018-01-06 21:58:25 · 3010 阅读 · 0 评论 -
多线程和并发库应用十六-Exchanger
用于线程之间的数据交换,线程完成一定的数据后项目其他线程进行数据交换。第一个先拿出数据等到第二个线程执行完成后进行数据交换。public class ExchangerTest { public static void main(String[] args) { ExecutorService service = Executors.newCachedThreadPool();原创 2018-01-15 23:21:01 · 2731 阅读 · 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 · 2739 阅读 · 0 评论 -
多线程和并发库应用十四-CyclicBarrier
字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。 public class Main { public static void main(String[] args){原创 2018-01-15 22:53:43 · 2737 阅读 · 0 评论 -
多线程和并发库应用十三-Semaphore
一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。拿到信号量的线程可以进入代码,否则就等待。通过acquire()和release()获取和释放访问许可。原创 2018-01-15 22:27:15 · 2709 阅读 · 0 评论 -
多线程和并发库应用七-线程间数据共享2
上两篇讲到了数据共享的方式本篇主要一个小题目来巩固一下 假设有4个线程两个要对j加1 ,两个要对j 减1 两种方式实现线程的数据共享 1. 将共享数据封装在另一个对象中,然后将这个对象逐一传递给各个Runable 对象。每个线程对共享数据的操作也分配到那个对象中去完成。这样容易实现针对该数据进行的各个操作的互斥和通信。public class ThreadShareData { p原创 2018-01-06 20:39:57 · 2767 阅读 · 0 评论 -
多线程和并发库应用六-ThreadLocal
上文中使用一个hashmap 来实现线程间的数据共享其实jdk 已经实现了一个这样的类ThreadLocal原创 2018-01-06 19:32:27 · 2849 阅读 · 0 评论 -
多线程和并发库应用五-线程间数据共享
本章主要讲述线程之间怎么实现数据共享原创 2018-01-06 18:22:35 · 2772 阅读 · 0 评论 -
多线程和并发库应用四-传统线程通信
本节通过一个案例来实现线程之间的通信。 现在有一个需求需要子线程循环10次,主线程循环100次,子线程循环10次,主线程循环100次,依次往复50次。。。。原创 2018-01-06 17:26:39 · 2763 阅读 · 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 · 2755 阅读 · 0 评论 -
多线程和并发库应用一传统定时器
在 jdk 1.5 前使用定时器。主要通过Timer 和TimerTask原创 2018-01-06 10:46:28 · 2762 阅读 · 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 · 2725 阅读 · 0 评论