![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java 多线程
爱拼才会赢1991
开源、分享、提高。专注WEB开发技术。
展开
-
Java多线程之生产者消费者问题<三>:使用阻塞队列更优雅地解决生产者消费者问题
前一篇文章讲了如何使用java5中的重入锁和条件变量优雅地解决生产者消费者问题,本文将继续探究java并发包(concurrent),寻求更好的解决方案。 java并发包中提供了阻塞队列(BlockingQueue),查看该类的注释说明,大概翻译下:这是一个额外支持等待队列非空或等待队列可用的队列,意思就是当线程去队列取元素时,如果没有元素线程将等待,直到有可用的有元素可取;当向队列中添加元素时原创 2016-03-17 14:18:21 · 3185 阅读 · 0 评论 -
Java多线程之生产者消费者问题<二>:使用重入锁、条件变量优雅地解决生产者消费者问题
Java5中新增了大量线程同步的功能,比如显式Lock,读写锁ReadWriteLock,条件变量Condition等,虽然这些功能使用之前的synchronized同步关键字都可能实现,但自己使用同步关键字不仅管理混乱,而且容易出错。 如下是使用显式Lock和条件变量Condition更好的解决生产者消费者问题,关于lock和condition读者可以自己查阅相关说明,也很好理解。 Consu原创 2016-03-12 13:47:31 · 1457 阅读 · 0 评论 -
Java多线程之生产者消费者问题<一>:使用synchronized 关键字解决生产者消费者问题
今天看了一片博文,讲Java多线程之线程的协作,其中作者用程序实例说明了生产者和消费者问题,但我及其他读者发现程序多跑几次还是会出现死锁,百度搜了下大都数的例子也都存在bug,经过仔细研究发现其中的问题,并解决了,感觉有意义贴出来分享下。原创 2014-10-16 22:22:55 · 3350 阅读 · 1 评论 -
Java多线程之线程协作
无意中在一篇文章中看到一个面试题,题目内容为:现有一个统计任务,需要3个线程完成,在这三个线程完成后由一个线程完成最后的统计报告工作,写出大概代码。 其实多线程问题都可以从两个角度考虑实现,一种是java5之前的同步关键字去实现,另一种是java5之后提供的多线程新特性角度去考虑。 对于传统的同步关键字思路:四个线程都共享一个信号量,当信号量标志子线程任务都完成时,唤醒最后的统计线程;对于java5原创 2016-03-26 16:27:52 · 1585 阅读 · 0 评论 -
Java多线程之并发容器:CopyOnWrite到底干啥用的
CopyOnWrite从字面上理解就是写入的时候做复制操作。而CopyOnWrite是一个Java5之后出现的并发容器,目的是为了提高并发的存取效率。对比CopyOnWrite、ArrayList和Vector源码,可以发现Vector是get和set方法都使用了synchronized关键字做了同步,ArrayList都没有用该关键字,很明显线程不安全;查看CopyOnWrite源码,get方法没原创 2016-03-26 17:44:49 · 1534 阅读 · 1 评论 -
Java多线程之使用volatile优雅地实现单例
关于volitale关键字volitale即是挥发物,被该关键字修饰变量的值发生改变时,会导致该变量的CPU缓存失效,必须CPU需要重新去内存拉取最新的值。 该关键字保证了变量的可见性(用一句术语:对于变量的写入操作总是happens-before每一个后续的对该变量的读写操作,也就是保证了更新后的变量,后续的程序总能看到),即该变量发生改变时,在改时间点之后执行的代码可以立即看到变化。 vol原创 2016-05-03 11:00:26 · 934 阅读 · 0 评论 -
Java多线程:线程池简介及线程池之坑
线程池简介自JDK1.5,Java吊炸天的并发包就提供线程池java.util.concurrent.ThreadPoolExecutor ,先来看看其各个字段的含义: corePoolSize 核心线程数,指保留的线程池大小(不超过maximumPoolSize值时,线程池中最多有corePoolSize 个线程工作)。 maximumPoolSize 指的是线程池的最大大小(线程池中最大有原创 2016-04-19 20:48:23 · 4819 阅读 · 0 评论