JAVA 멀티스레드 생산자 소비자 모델 실현

14408 단어 생산자 소비자
  • 문제 배경: 파충류가 되어 인터넷에서 책을 기어오르고 기어내린 후 데이터베이스에 삽입
  •  
  • 문제 설계: 여러 라인으로 동시에 인터넷에서 책을 기어오르고 기어오르는 책은 한 라인을 삽입한다. 이런 라인은 같은 책 대기열을 공유하고 동시에 운행하기 시작한다
  •  
    책 POJO
     1 package thread;
     2 
     3 public class Book {
     4     private Integer bookId;
     5     private String bookName;
     6 
     7     public Integer getBookId() {
     8         return bookId;
     9     }
    10 
    11     public void setBookId(Integer bookId) {
    12         this.bookId = bookId;
    13     }
    14 
    15     public String getBookName() {
    16         return bookName;
    17     }
    18 
    19     public void setBookName(String bookName) {
    20         this.bookName = bookName;
    21     }
    22 }

     
     
    파충선
     1 package thread;
     2 
     3 import java.util.List;
     4 import java.util.Queue;
     5 
     6 public class CrawlerThread extends Thread {
     7     private List<Integer> bookIdList;   //     Id 
     8     private Queue<Book> bookQueue;  //           
     9 
    10     public CrawlerThread(List<Integer> bookIdList, Queue<Book> bookQueue) {
    11         this.bookIdList = bookIdList;
    12         this.bookQueue = bookQueue;
    13     }
    14 
    15     public void run() {
    16         for(int i = 0; i < bookIdList.size(); i++) {
    17             Book book = new Book(); //             
    18             book.setBookId(bookIdList.get(i));
    19             book.setBookName("  " + book.getBookId());
    20 
    21             try {
    22                 sleep((long) (Math.random() * 1000 * 1000));  //  sleep 100 - 1000  ,            
    23             } catch (InterruptedException e) {
    24                 e.printStackTrace();
    25             }
    26 
    27             bookQueue.offer(book);  //           
    28         }
    29     }
    30 }

     
    스레드 삽입
     1 package thread;
     2 
     3 import java.util.Queue;
     4 
     5 public class InsertThread extends Thread {
     6     private Queue<Book> bookQueue;  //           
     7 
     8     public InsertThread(Queue<Book> bookQueue) {
     9         this.bookQueue = bookQueue;
    10     }
    11 
    12     public void run() {
    13         int timer = 0; //     
    14 
    15         while(timer < 30) { //    30  bookQueue   ,   ,    
    16             if(bookQueue.size() != 0) { //       
    17                 Book book;
    18                 while((book = bookQueue.poll()) != null) {
    19                     System.out.println(book.getBookName()); //           
    20                 }
    21                 timer = 0;  //       
    22             } else {
    23                 try {
    24                     sleep(60 * 1000);   //       
    25                 } catch (InterruptedException e) {
    26                     e.printStackTrace();
    27                 }
    28                 timer++;    //timer  +1
    29             }
    30         }
    31     }
    32 }

     
    주 프로그램
     1 package thread;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import java.util.Queue;
     6 import java.util.concurrent.ConcurrentLinkedQueue;
     7 
     8 public class Start {
     9     public void main(String[] args) {
    10         Queue<Book> bookQueue = new ConcurrentLinkedQueue<Book>();  //                 
    11 
    12         //      Id 
    13         List<Integer> bookIdList = new ArrayList<Integer>();
    14         bookIdList.add(1);
    15         bookIdList.add(2);
    16         bookIdList.add(3);
    17         bookIdList.add(4);
    18         bookIdList.add(5);
    19 
    20         CrawlerThread ct = new CrawlerThread(bookIdList, bookQueue);    //      Id      ,        ,     , ..- -
    21         InsertThread it = new InsertThread(bookQueue);  //       
    22 
    23         ct.start();
    24         it.start();
    25     }
    26 }

    좋은 웹페이지 즐겨찾기