摘要: 在我的上一条博客中,已经介绍到了多线程的经典案列——生产者消费者模式,但是在上篇中用的是传统的麻烦的非阻塞队列实现的。在这篇博客中我将介绍另一种方式就是:用阻塞队列完成生产者消费者模式,可以使用多种阻塞队列,这里最好使用LinkedBlockingQueue 下面请看代码: 结果输出: 总结一下: 阅读全文
posted @ 2019-01-17 17:59 橘子洲头。 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 生产者消费者模型 具体来讲,就是在一个系统中,存在生产者和消费者两种角色,他们通过内存缓冲区进行通信,生产者生产消费者需要的资料,消费者把资料做成产品。生产消费者模式如下图。(图片来自网络,侵删!) 生产者消费者模型的实现 生产者是一堆线程,消费者是另一堆线程,内存缓冲区可以使用List数组队列,数 阅读全文
posted @ 2019-01-17 17:51 橘子洲头。 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 1.什么是阻塞队列 我们知道,PriorityQueue、LinkedList这些都是非阻塞队列。在我们使用非阻塞队列的时候有一个很大问题,它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略,这个实现起来就非常麻烦。但是有了阻塞队列就不一样了, 阅读全文
posted @ 2019-01-17 17:42 橘子洲头。 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 关于这三个方法,我们可以查询API得到下列解释: wait():导致当前的线程等待,直到其他线程调用此对象的notify( ) 方法或 notifyAll( ) 方法或者指定的事件用完 notify():唤醒在此对象监视器上等待的单个线程 notifyAll():唤醒在此对象监视器上等待的所有线程 阅读全文
posted @ 2019-01-17 17:34 橘子洲头。 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 1.synchronized是什么?synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象(锁对象);2. 修饰一个(静态)方法,被修饰的方法称为同 阅读全文
posted @ 2019-01-17 15:03 橘子洲头。 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 1.Java多线程实现的方式有四种:1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target3.通过Callable和FutureTask创建线程4.通过线程池创建线程2.Thread实现方式 阅读全文
posted @ 2019-01-17 12:16 橘子洲头。 阅读(2288) 评论(1) 推荐(0) 编辑