> Java > java지도 시간 > 본문

Java에서 다중 스레드 메시지 대기열을 구현하는 방법의 예

黄舟
풀어 주다: 2017-07-24 15:36:52
원래의
2722명이 탐색했습니다.

이 글은 주로 Java 멀티스레드 메시지 큐의 구현 코드를 소개합니다. 편집자는 이것이 꽤 좋다고 생각합니다. 이제 이를 여러분과 공유하고 참고용으로 제공하겠습니다. 에디터를 따라가서 살펴보세요

이 글은 자바 멀티스레드 메시지 큐의 구현 코드를 소개합니다. 여러분께도 도움이 되었으면 좋겠습니다.

1. 대기열 캐시 풀 정의:


 //static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。
private static List<Queue> queueCache = new LinkedList<Queue>();
로그인 후 복사

2. 대기열 버퍼 풀의 최대 메시지 수를 정의합니다. 이 값에 도달하면 대기열 체크인은 체크아웃이 될 때까지 기다립니다. 계속하려면 이 값보다 낮아야 합니다.


private Integer offerMaxQueue = 2000;
로그인 후 복사

3. 대기열 버퍼 풀에 메시지가 없으면 체크아웃 스레드가 대기하게 됩니다


new Thread(){
    public void run(){
     while(true){
      String ip = null;
      try {
       synchronized (queueCache) {
        Integer size = queueCache.size();
        if(size==0){
//队列缓存池没有消息,等待。。。。     queueCache.wait();
        }
        Queue queue = queueCache.remove(0);

        if(isIpLock(queueStr)){//假若这个是一个多应用的分布式系统,那么这个判断应该是分布式锁,这里说的锁不是线程停止,而是跳过该消息,滞后处理
         queueCache.add(queue);该queue重新加入队列缓冲池,滞后处理,
         continue;
        }else{
      ;//这里是处理该消息的操作。
        }
        size = queueCache.size();
        if(size<offerMaxQueue&&size>=0){     queueCache.notifyAll();//在队列缓存池不超过最大值的前提下,假若检入正在等待中,那么那么让他们排队检入。
        }
       }
      } catch (Exception e) {
       e.printStackTrace();
      }finally{
       try {//检出该消息队列的锁
        unIpLock(queueStr);
       } catch (Execption e) {//捕获异常,不能让线程挂掉
        e.printStackTrace();
       } 
                      }
      }
   }.start();
로그인 후 복사

4. 잠금 방식 구현


synchronized (queueCache) {
while(true){
Integer size = queueCache.size();
if(size>=offerMaxQueue){
      try {
       queueCache.wait();
continue;//继续执行等待中的检入任务。
 } catch (InterruptedException e) {
   e.printStackTrace();
 }
 }//IF

if(size<=offerMaxQueue&&size>0){
 queueCache.notifyAll();
}
break;//检入完毕
}//while
}
로그인 후 복사

위 내용은 Java에서 다중 스레드 메시지 대기열을 구현하는 방법의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿