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");