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
Fantastisk!
Completion rate forbedret til 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!