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
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!