1
1
package com .stacktips .threads ;
2
2
3
3
import java .util .List ;
4
- import java .util .concurrent .*;
4
+ import java .util .concurrent .CompletableFuture ;
5
+ import java .util .concurrent .ExecutorService ;
6
+ import java .util .concurrent .Executors ;
7
+ import java .util .concurrent .TimeUnit ;
5
8
6
9
public class WebScraperUsingCompletableFuture {
7
10
@@ -15,18 +18,16 @@ public WebScraperUsingCompletableFuture(int nThreads) {
15
18
16
19
public List <String > scrapeWebsites (List <String > urls ) {
17
20
List <CompletableFuture <String >> futures = urls .stream ()
18
- .map (url -> CompletableFuture .supplyAsync (() -> webScraper .scrapeWebsite (url ), executorService )
19
- .orTimeout (30 , TimeUnit .SECONDS )
20
- .exceptionally (e -> "Error: " + e .getMessage ()))
21
- .toList ();
21
+ .map (url -> CompletableFuture .supplyAsync (() -> webScraper .scrapeWebsite (url ), executorService )
22
+ .orTimeout (30 , TimeUnit .SECONDS )
23
+ .exceptionally (e -> "Error: " + e .getMessage ()))
24
+ .toList ();
22
25
23
26
return futures .stream ()
24
- .map (CompletableFuture ::join )
25
- .toList ();
27
+ .map (CompletableFuture ::join )
28
+ .toList ();
26
29
}
27
30
28
-
29
-
30
31
public void shutdown () {
31
32
executorService .shutdown ();
32
33
try {
@@ -40,11 +41,11 @@ public void shutdown() {
40
41
41
42
public static void main (String [] args ) {
42
43
List <String > urls = List .of (
43
- "https://www.example.com" ,
44
- "https://www.github.com" ,
45
- "https://www.stackoverflow.com" ,
46
- "https://www.java.com" ,
47
- "https://www.spring.io"
44
+ "https://www.example.com" ,
45
+ "https://www.github.com" ,
46
+ "https://www.stackoverflow.com" ,
47
+ "https://www.java.com" ,
48
+ "https://www.spring.io"
48
49
);
49
50
50
51
WebScraperUsingCompletableFuture scraper = new WebScraperUsingCompletableFuture (3 );
0 commit comments