Utfordring: Executorer
Oppgave
Tenk deg at du har en liste med filer, hvor hver fil inneholder tekstlinjer. Oppgaven er å lese linjer fra disse filene parallelt og telle antall ord i hver linje. Bruk ExecutorService, Future og en trådpool for å løse oppgaven.
Krav:
-
Opprett en trådpool: Opprett en trådpool med fast størrelse ved å bruke
Executors.newFixedThreadPool(int nThreads), dernThreadser antall tråder i poolen; -
Implementering av oppgave: Implementer en
WordCountTask-klasse som implementererCallable<String>-grensesnittet og mottar en fil som input. I call-metoden til denne klassen skal du lese linjer fra filen, telle antall ord i hver linje, og returnere resultatet; -
Bruk av
ExecutorService: Ved bruk avExecutorServicesendes jobber til trådpoolen for utførelse. Jobbene må brukeWordCountTask-klassen.
Strengen som dannes i en separat tråd må returneres, og get()-metoden til Future-grensesnittet må brukes for å hente resultatet av trådens utførelse og skrive det ut til konsollen i main-metoden.
Les fra fil
For å implementere call()-metoden, kan du bruke BufferedReader for å lese strenger fra filer. Benytt en try-with-resources-blokk slik at ressursene automatisk blir lukket for deg.
Main.java
1BufferedReader reader = new BufferedReader(new FileReader(file));
Bruk readLine()-metoden for å lese hver linje, og sørg for å sjekke etter null for å avgjøre når du har nådd slutten av filen.
Deretter, del opp strengen i et array av strenger ved å bruke split("\\s+")-metoden med \\s+-mønsteret, som skiller strengen med mellomrom, og finn deretter størrelsen på arrayet.
I selve strengen, som strømmen returnerer, bruk denne formateringen
Main.java
1String.format("File: %s | Line: %s | Word Count %d", fileName, line, countWord)
Filene er allerede i prosjektet, du trenger ikke å opprette eller endre dem!
Eksempelutdata
File: file1.txt | Line: Hello | Word Count: 1
File: file2.txt | Line: Hello I Love Java | Word Count: 4
File: file2.txt | Line: Lol Hello | Word Count: 2
File: file3.txt | Line: Java so so so so very nice | Word Count: 7
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Can you show me how to implement the WordCountTask class?
How do I use ExecutorService to run the WordCountTask for multiple files?
Can you explain how to format the output for each line as shown in the example?
Awesome!
Completion rate improved to 3.33
Utfordring: Executorer
Sveip for å vise menyen
Oppgave
Tenk deg at du har en liste med filer, hvor hver fil inneholder tekstlinjer. Oppgaven er å lese linjer fra disse filene parallelt og telle antall ord i hver linje. Bruk ExecutorService, Future og en trådpool for å løse oppgaven.
Krav:
-
Opprett en trådpool: Opprett en trådpool med fast størrelse ved å bruke
Executors.newFixedThreadPool(int nThreads), dernThreadser antall tråder i poolen; -
Implementering av oppgave: Implementer en
WordCountTask-klasse som implementererCallable<String>-grensesnittet og mottar en fil som input. I call-metoden til denne klassen skal du lese linjer fra filen, telle antall ord i hver linje, og returnere resultatet; -
Bruk av
ExecutorService: Ved bruk avExecutorServicesendes jobber til trådpoolen for utførelse. Jobbene må brukeWordCountTask-klassen.
Strengen som dannes i en separat tråd må returneres, og get()-metoden til Future-grensesnittet må brukes for å hente resultatet av trådens utførelse og skrive det ut til konsollen i main-metoden.
Les fra fil
For å implementere call()-metoden, kan du bruke BufferedReader for å lese strenger fra filer. Benytt en try-with-resources-blokk slik at ressursene automatisk blir lukket for deg.
Main.java
1BufferedReader reader = new BufferedReader(new FileReader(file));
Bruk readLine()-metoden for å lese hver linje, og sørg for å sjekke etter null for å avgjøre når du har nådd slutten av filen.
Deretter, del opp strengen i et array av strenger ved å bruke split("\\s+")-metoden med \\s+-mønsteret, som skiller strengen med mellomrom, og finn deretter størrelsen på arrayet.
I selve strengen, som strømmen returnerer, bruk denne formateringen
Main.java
1String.format("File: %s | Line: %s | Word Count %d", fileName, line, countWord)
Filene er allerede i prosjektet, du trenger ikke å opprette eller endre dem!
Eksempelutdata
File: file1.txt | Line: Hello | Word Count: 1
File: file2.txt | Line: Hello I Love Java | Word Count: 4
File: file2.txt | Line: Lol Hello | Word Count: 2
File: file3.txt | Line: Java so so so so very nice | Word Count: 7
Takk for tilbakemeldingene dine!