Haaste: Executorit
Tehtävä
Kuvittele, että sinulla on tiedostolista, joista jokainen sisältää tekstirivejä. Tehtävänäsi on lukea rivit näistä tiedostoista rinnakkain ja laskea sanojen määrä jokaisella rivillä. Käytä ExecutorService-rajapintaa, Future-olioita ja säieallasta tehtävän suorittamiseen.
Vaatimukset:
-
Luo säieallas: Luo kiinteän kokoinen säieallas käyttämällä
Executors.newFixedThreadPool(int nThreads), missänThreadson säikeiden määrä altaassa; -
Tehtävän toteutus: Toteuta
WordCountTask-luokka, joka toteuttaaCallable<String>-rajapinnan ja vastaanottaa tiedoston syötteenä. Tämän luokan call-metodissa lue rivit tiedostosta, laske sanojen määrä jokaisella rivillä ja palauta tulos; -
Käytä
ExecutorService-rajapintaa: KäytäExecutorService-rajapintaa lähettääksesi tehtäviä säiealtaaseen suoritettavaksi. Tehtävien tulee käyttääWordCountTask-luokkaa.
Lisäksi merkkijono, jonka muodostaa erillisessä säikeessä, tulee palauttaa ja käyttää get()-rajapinnan Future-metodia saadaksesi säikeen suorituksen tuloksen ja tulostaa se konsoliin main-metodissa.
Lue tiedostosta
call()-metodin toteuttamiseen voidaan käyttää BufferedReader-luokkaa merkkijonojen lukemiseen tiedostoista. Käytä try-with-resources-lohkoa, jotta resurssit suljetaan automaattisesti puolestasi.
Main.java
1BufferedReader reader = new BufferedReader(new FileReader(file));
Käytä readLine()-metodia lukeaksesi jokaisen rivin ja varmista, että tarkistat null-arvon selvittääksesi, milloin olet saavuttanut tiedoston lopun.
Seuraavaksi jaa merkkijono merkkijonotaulukoksi käyttämällä split("\\s+")-metodia ja \\s+-kuviota, joka erottaa merkkijonon välilyönneillä, ja ota sitten taulukon koko.
Merkkijonossa itsessään, jonka virta palauttaa, käytä tätä muotoilua
Main.java
1String.format("File: %s | Line: %s | Word Count %d", fileName, line, countWord)
Tiedostot ovat jo projektissa, sinun ei tarvitse luoda tai muokata niitä!
Esimerkkituloste
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
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
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
Haaste: Executorit
Pyyhkäise näyttääksesi valikon
Tehtävä
Kuvittele, että sinulla on tiedostolista, joista jokainen sisältää tekstirivejä. Tehtävänäsi on lukea rivit näistä tiedostoista rinnakkain ja laskea sanojen määrä jokaisella rivillä. Käytä ExecutorService-rajapintaa, Future-olioita ja säieallasta tehtävän suorittamiseen.
Vaatimukset:
-
Luo säieallas: Luo kiinteän kokoinen säieallas käyttämällä
Executors.newFixedThreadPool(int nThreads), missänThreadson säikeiden määrä altaassa; -
Tehtävän toteutus: Toteuta
WordCountTask-luokka, joka toteuttaaCallable<String>-rajapinnan ja vastaanottaa tiedoston syötteenä. Tämän luokan call-metodissa lue rivit tiedostosta, laske sanojen määrä jokaisella rivillä ja palauta tulos; -
Käytä
ExecutorService-rajapintaa: KäytäExecutorService-rajapintaa lähettääksesi tehtäviä säiealtaaseen suoritettavaksi. Tehtävien tulee käyttääWordCountTask-luokkaa.
Lisäksi merkkijono, jonka muodostaa erillisessä säikeessä, tulee palauttaa ja käyttää get()-rajapinnan Future-metodia saadaksesi säikeen suorituksen tuloksen ja tulostaa se konsoliin main-metodissa.
Lue tiedostosta
call()-metodin toteuttamiseen voidaan käyttää BufferedReader-luokkaa merkkijonojen lukemiseen tiedostoista. Käytä try-with-resources-lohkoa, jotta resurssit suljetaan automaattisesti puolestasi.
Main.java
1BufferedReader reader = new BufferedReader(new FileReader(file));
Käytä readLine()-metodia lukeaksesi jokaisen rivin ja varmista, että tarkistat null-arvon selvittääksesi, milloin olet saavuttanut tiedoston lopun.
Seuraavaksi jaa merkkijono merkkijonotaulukoksi käyttämällä split("\\s+")-metodia ja \\s+-kuviota, joka erottaa merkkijonon välilyönneillä, ja ota sitten taulukon koko.
Merkkijonossa itsessään, jonka virta palauttaa, käytä tätä muotoilua
Main.java
1String.format("File: %s | Line: %s | Word Count %d", fileName, line, countWord)
Tiedostot ovat jo projektissa, sinun ei tarvitse luoda tai muokata niitä!
Esimerkkituloste
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
Kiitos palautteestasi!