当前位置:嗨网首页>书籍在线阅读

08-案例实现

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

案例实现

根据如下步骤来实现本案例。

1.创建一个实现了 Runnable 接口的 Client 类:

public class Client implements Runnable {

2.声明一个 LinkedBlockingDeque<String> 类型的私有属性,将其命名为 requestList

private final LinkedBlockingDeque<String> requestList;

3.实现一个构造方法来初始化属性:

public Client(LinkedBlockingDeque<String> requestList) {
  this.requestList=requestList;
}

4.实现 run() 方法。用 requestList 对象的 put() 方法每秒插入5个 String 类型的对象到双端队列。重复该步骤3次:

@Override
public void run() {
  for(int i=0; i<3; i++) {
    for(int j=0; j<5; j++) {
      StringBuilder request = new StringBuilder();
      request.append(i);
      request.append(":");
      request.append(j);
      try {
        requestList.put(request.toString());
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      System.out.printf("Client added: %s at %s.\n", request, 
                        new Date());
    }
    try {
      TimeUnit.SECONDS.sleep(2);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
  System.out.printf("Client: End.\n");
}

5.创建一个 Main 类,编写 main() 方法:

public class Main {
  public static void main(String[] args) throws Exception {

6.声明一个 LinkedBlockingDeque<String> 类型的 list 变量,令其固定长度为3:

LinkedBlockingDeque<String> list=new LinkedBlockingDeque<>(3);

7.创建并启动一个 Thread 对象来执行一个 client 对象任务:

Client client=new Client(list);
Thread thread=new Thread(client);
thread.start();

8.通过列表对象的 take() 方法,以300ms的频率获取3个 String 类型的对象并同时打印到控制台。重复该步骤5次:

for(int i=0; i < 5; i++) {
  for(int j=0; j < 3; j++) {
    String request=list.take();
    System.out.printf("Main: Removed: %s at %s. Size: %d\n", 
                      request,new Date(), list.size());
  }
  TimeUnit.MILLISECONDS.sleep(300);
}

9.在程序的结尾处打印一条消息:

System.out.printf("Main: End of the program.\n");