11.4预习,线程:Lock、BlockQueue、线程池、生产者和消费者

  1.  Lock

  • 通过Lock可以知道线程有没有成功获取到锁。这个是synchronized无法办到的。
  • 总结一下,也就是说Lock提供了比synchronized更多的功能。但是要注意以下几点:
  • 1)Lock不是Java语言内置的,synchronized是Java语言的关键字,因此是内置特性。Lock是一个类,通过这个类可以实现同步访问;
  • 2)synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中
  • 3)在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,

  2.  BlockQueue

常用的队列主要有以下两种:
        先进先出(FIFO):先插入的队列的元素也最先出队列,类似于排队的功能。
            从某种程度上来说这种队列也体现了一种公平性。
          后进先出(LIFO):后插入队列的元素最先出队列,这种队列优先处理最近发生的事件。

    阻塞队列的核心就是生产者和消费着
        当队列中没有数据的情况下,消费者端的所有线程都会被自动阻塞(挂起),直到有数据放入队列
        队列中填满数据的情况下,生产者端的所有线程都会被自动阻塞(挂起),直到队列中有空的位置,线程被自动唤醒。


  3.  线程池

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行


  4.  生产者和消费者(线程通信的基本模型.必回的)

生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。在Java中一共有四种方法支持同步,其中前三个是同步方法,一个是管道方法。

(1)Object的wait() / notify()方法 
(2)Lock和Condition的await() / signal()方法 
(3)BlockingQueue阻塞队列方法 
(4)PipedInputStream / PipedOutputStream
--------------------- 
作者:Mlib 
来源:CSDN 
原文:https://blog.csdn.net/u010983881/article/details/78554671 
版权声明:本文为博主原创文章,转载请附上博文链接!

  5.  课外补充

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值