SynchronousQueue容量为0,就是这个东西它不是用来装内容的,SynchronousQueue是专门用来两个线程之间传内容的,给线程下达任务的,老师讲过一个容器叫Exchanger还有印象吗,本质上这个容器的概念是一样的。看下面代码:

昨天我去面试,问他SynchronousQueue没答上来

 

有一个线程起来等着take,里面没有值一定是take不到的,然后就等着。然后当put的时候能取出来,take到了之后能打印出来,最后打印这个容器的size-定是0,打印出aaa来这个没问题。

那当把线程注释掉,在运行一下程序就会在这阻塞,永远等着。如果add方法直接就报错,原因是满了,这个容器为0,你不可以往里面扔东西。

这个Queue和其他的很重要的区别就是你不能往里头装东西,只能用来阻塞式的put调用,要求是前面得有人等着拿这个东西的时候你才可以往里装,但容量为0,其实说白了就是我要递到另外一个的手里才可以。

这个SynchronousQueue看似没有用,其实不然,SynchronousQueue在线程池里用处特别大, 很多的线程取任务,互相之间进行任务的一个调度的时候用的都是它。

相关文章:

  • 2021-10-26
  • 2021-11-25
  • 2021-10-15
  • 2021-10-27
  • 2021-06-03
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-04-08
  • 2022-12-23
  • 2021-11-20
  • 2021-11-26
  • 2021-10-17
  • 2022-02-16
相关资源
相似解决方案