微信聊天记录同步器,java同步器SynchronousQueue详解

2021-04-08 18:01 272 浏览量

同步器简介

自学习以来,从c / c ++到Java锁,线程的操作已得到了很大的改进(当然,它并不太麻烦,实现Java读写锁仍然带来很多好处,但是设计是我无法恭维,tcp和udp是两种类型,所以我现在对udp不太熟悉。其中,我最需要的设计是同步器。除了其余的,我只需要它。我现在能感觉到的唯一有用的事情是循环打印a和b,但没有发现任何效果,只有两个。适用于生产者和消费者问题。以上是四个主要的同步器。我听说过两个以上的同步器。在某些情况下很难考虑。

场景创意

这次让我们谈谈最后两个场景。我要做的是收集一堆数据,然后收集其他数据进行综合处理,但这两个数据与时间有关。如果它们是顺序执行的,那么处理结果的可信度就较低,最初的想法是使用异步处理,同时收集两个数据,然后一起处理,作为首选,我的收集信息仍然是定期任务,我必须使用定时线程池,但是这种线程池(更不用说,更建议将此类替换为线程池)不会为异步处理返回值,并且我无法直接获取处理的数据。我只能使用线程来做到这一点。是的,有必要使用同步器进行同步。手动阻止线程然后唤醒此行为是太不可取的。如果您全部唤醒,则可能会导致本不应该运行的代码开始运行,唤醒一个代码,您必须查看CPU调度,因此我想到了和谐,最后选择了它。

实际上,这是一个特殊的阻止队列。特殊之处在于特殊之处在于它最多放置一个元素,并且该元素在特定时间不被使用,并且长度始终为0。如果查看api,您会发现没有可以使用的方法。里面放了几个,三个,拿走了两个。

演示

qq同步助手 微信记录_微信聊天记录同步器_记录微信聊天记录软件

生产者,消息最多可以存储1分钟

public void run() {
  try {
  queue.offer(i++,1,TimeUnit.MINUTES);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  System.out.println("add");
 }

消费者

System.out.println(queue.poll(1,TimeUnit.SECONDS));

使用此同步器会出现这种时序生产者-消费者问题,代码量非常小,并且不需要自己编写同步代码。它还避免了最初的唤醒阻塞导致的不可预测性。

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:微信聊天记录同步器,java同步器SynchronousQueue详解 |