找出多个文本中频率高的单词(2)
接上篇,我打算用 用concurrent包里的CountDownLatch类 去实现。 还是直接上代码吧: Main.java package com.anders.thread;import java.util.HashMap;import java.util.Map;import java.util.concurrent.CountDownLatch;import java.util.concurrent.Execut
接上篇,我打算用用concurrent包里的CountDownLatch类去实现。
还是直接上代码吧:
Main.java
package com.anders.thread; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) { int threadNumber = Integer.parseInt(PropertiesUtil.get("ThreadNumber")); ExecutorService es = Executors.newFixedThreadPool(threadNumber); SingleThreadStatistics[] threads = new SingleThreadStatistics[threadNumber]; try { CountDownLatch doneSignals = new CountDownLatch(threadNumber); // 这是在 文件数比线程数多的情况下,若文件比线程数少的话,加个判断就可以了 for (int i = 0; i map = mergeThreadMap(threads); display(map); } catch (InterruptedException e) { e.printStackTrace(); } finally { es.shutdown(); } } private static Map<string integer> mergeThreadMap(SingleThreadStatistics[] threads) { Map<string integer> map = new HashMap<string integer>(); for (SingleThreadStatistics singleThreadStatistics : threads) { Map<string integer> threadMap = singleThreadStatistics.getMap(); for (Map.Entry<string integer> entry : threadMap.entrySet()) { String threadWord = entry.getKey(); Integer threadWordCount = entry.getValue(); Integer wordCount = map.get(threadWord); if (wordCount == null) { map.put(threadWord, threadWordCount); } else { map.put(threadWord, threadWordCount + wordCount); } } } return map; } private static void display(Map<string integer> map) { for (Map.Entry<string integer> entry : map.entrySet()) { System.out.print(entry.getKey()); System.out.println(" ," + entry.getValue()); } } } </string></string></string></string></string></string></string>
SingleThreadStatistics.java
package com.anders.thread; import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CountDownLatch; public class SingleThreadStatistics implements Runnable { private Map<string integer> map = new HashMap<string integer>(); private CountDownLatch doneSignals; public SingleThreadStatistics(CountDownLatch doneSignals) { this.doneSignals = doneSignals; } @Override public void run() { while (true) { File file = FileManager.getFile(); if (file == null) { break; } FileManager.parseFile(file, map); } doneSignals.countDown(); } // --------getter/setter------------ public Map<string integer> getMap() { return map; } } </string></string></string>
FileManager.java
package com.anders.thread; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Manage files and offer single for every thread * * @author Anders * */ public class FileManager { private static List<file> fileList; private static int index = 0; static { String dirPath = PropertiesUtil.get("DirName"); String path = FileManager.class.getClassLoader().getResource(dirPath).getPath(); fileList = getFiles(path); } public synchronized static File getFile() { if (index == fileList.size()) { return null; } File file = fileList.get(index); index++; return file; } private static List<file> getFiles(String dirPath) { File dir = new File(dirPath); if (!dir.exists() || !dir.isDirectory()) { return Collections.emptyList(); } File[] files = dir.listFiles(); //判断 是不是 以txt结尾的文件 Pattern pattern = Pattern.compile(PropertiesUtil.get("FileType")); List<file> list = new ArrayList<file>(); for (File file : files) { Matcher matcher = pattern.matcher(file.getName()); if (matcher.matches()) { list.add(file); } } return list; } //读取文件 使用的是java.nio的filechannel 和bytebuffer public static void parseFile(File file, Map<string integer> map) { FileInputStream ins = null; try { ins = new FileInputStream(file); FileChannel fIns = ins.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(1024); while (true) { buffer.clear(); int r = fIns.read(buffer); if (r == -1) { break; } buffer.flip(); buffer2word(buffer, map); } fIns.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (ins != null) { ins.close(); } } catch (IOException e) { e.printStackTrace(); } } } //这个是 将读取的内容,提取出 英语字母 private static void buffer2word(ByteBuffer buffer, Map<string integer> map) { StringBuilder str = new StringBuilder(); for (int i = 0; i map) { Integer count = map.get(word); if (null == count) { map.put(word, 1); } else { map.put(word, ++count); } } //看看是否是 英语字符 private static boolean isEnglishChar(byte b) { //通过ASCLL码 判断 if (b > 65 && b 97 && b <br> <p><br> </p> config.properties<br> <pre class="brush:php;toolbar:false">ThreadNumber=3 DirName=txt FileType=.*.txt
其实我觉得最重要的代码是 FileManager里的
public synchronized static File getFile() { if (index == fileList.size()) { return null; } File file = fileList.get(index); index++; return file; }
而且还有一个很重要的一点就是 验证index是否已经读取完所有的文件 要和index++放在一个同步块里面,不然会引起线程安全问题

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Memori adalah salah satu komponen terpenting dalam komputer, dan ia mempunyai kesan penting terhadap prestasi dan kestabilan komputer. Apabila memilih memori, orang cenderung untuk menumpukan pada dua parameter penting, iaitu masa dan kekerapan. Jadi, untuk prestasi ingatan, yang mana lebih penting, masa atau kekerapan? Mula-mula, mari kita fahami konsep pemasaan dan kekerapan. Pemasaan merujuk kepada selang masa yang diperlukan untuk cip memori menerima dan memproses data. Ia biasanya diwakili oleh nilai CL (CASLatency) Semakin kecil nilai CL, semakin cepat kelajuan pemprosesan memori. Kekerapan adalah dalam

Apakah yang perlu saya lakukan jika sistem win7 tidak dapat membuka teks txt Apabila kita perlu mengedit fail teks pada komputer kita, cara paling mudah ialah menggunakan alat teks. Walau bagaimanapun, sesetengah pengguna mendapati bahawa komputer mereka tidak boleh membuka fail teks txt Jadi bagaimana untuk menyelesaikan masalah ini? Mari kita lihat tutorial terperinci untuk menyelesaikan masalah tidak dapat membuka teks txt dalam sistem win7. Tutorial untuk menyelesaikan masalah bahawa sistem win7 tidak boleh membuka teks txt 1. Klik kanan mana-mana fail txt pada desktop Jika tiada fail txt, anda boleh klik kanan untuk membuat dokumen teks baru, dan kemudian pilih sifat, sebagai ditunjukkan di bawah: 2. Dalam tetingkap sifat txt yang dibuka, cari butang tukar di bawah pilihan umum, seperti yang ditunjukkan dalam rajah di bawah: 3. Dalam tetapan mod terbuka pop timbul

Dalam iOS 17, Apple telah merombak keseluruhan pilihan nada dering dan nada teksnya, menawarkan lebih daripada 20 bunyi baharu yang boleh digunakan untuk panggilan, mesej teks, penggera dan banyak lagi. Begini cara untuk melihat mereka. Banyak nada dering baharu lebih panjang dan berbunyi lebih moden daripada nada dering lama. Ia termasuk arpeggio, patah, kanopi, kabin, kicauan, subuh, berlepas, dolop, perjalanan, cerek, merkuri, galaksi, quad, jejari, pemulung, anak benih, tempat berteduh, taburan, langkah, masa cerita , goda, senget, terbentang dan lembah. Refleksi kekal sebagai pilihan nada dering lalai. Terdapat juga 10+ nada teks baharu yang tersedia untuk mesej teks masuk, mel suara, makluman mel masuk, makluman peringatan dan banyak lagi. Untuk mengakses nada dering dan nada teks baharu, pertama sekali, pastikan iPhone anda

1. Tugasan teks Artikel ini membincangkan terutamanya kaedah ringkasan teks generatif, dan cara menggunakan pembelajaran kontrastif dan model besar untuk melaksanakan paradigma latihan ringkasan teks generatif terkini. Ia terutamanya melibatkan dua artikel, satu ialah BRIO: Bringing Order to Abstractive Summarization (2022), yang menggunakan pembelajaran kontrastif untuk memperkenalkan tugas pemeringkatan dalam model generatif yang lain ialah OnLearning to Summarize with Large Language Models as References (2023), yang selanjutnya memperkenalkan model besar untuk menjana data latihan berkualiti tinggi berdasarkan BRIO. 2. Kaedah latihan rumusan teks generatif dan

Tutorial ini menunjukkan kepada anda cara mencari teks atau frasa tertentu pada semua tab terbuka dalam Chrome atau Edge pada Windows. Adakah terdapat cara untuk melakukan carian teks pada semua tab terbuka dalam Chrome? Ya, anda boleh menggunakan sambungan web luaran percuma dalam Chrome untuk melakukan carian teks pada semua tab terbuka tanpa perlu menukar tab secara manual. Sesetengah sambungan seperti TabSearch dan Ctrl-FPlus boleh membantu anda mencapai ini dengan mudah. Bagaimana untuk mencari teks merentas semua tab dalam Google Chrome? Ctrl-FPlus ialah sambungan percuma yang memudahkan pengguna mencari perkataan, frasa atau teks tertentu merentas semua tab tetingkap penyemak imbas mereka. Pengembangan ini

Dalam artikel ini, kami akan menunjukkan kepada anda cara menggunakan Microsoft Reading Coach dalam Immersive Reader pada Windows PC. Ciri panduan membaca membantu pelajar atau individu berlatih membaca dan mengembangkan kemahiran literasi mereka. Anda bermula dengan membaca petikan atau dokumen dalam aplikasi yang disokong, dan berdasarkan ini, laporan bacaan anda dijana oleh alat Jurulatih Membaca. Laporan bacaan menunjukkan ketepatan bacaan anda, masa yang anda ambil untuk membaca, bilangan perkataan yang betul setiap minit dan perkataan yang anda rasa paling mencabar semasa membaca. Anda juga akan dapat mempraktikkan perkataan, yang akan membantu mengembangkan kemahiran membaca anda secara umum. Pada masa ini, hanya Office atau Microsoft365 (termasuk OneNote untuk Web dan Word untuk Kami

ASUS tufz790plus menyokong frekuensi memori ASUS TUFZ790-PLUS motherboard berprestasi tinggi yang menyokong memori DDR4 dwi-saluran dan menyokong sehingga 64GB memori. Kekerapan memorinya sangat berkuasa, sehingga 4800MHz. Frekuensi memori yang disokong khusus termasuk 2133MHz, 2400MHz, 2666MHz, 2800MHz, 3000MHz, 3200MHz, 3600MHz, 3733MHz, 3866MHz, 4000MHz, 4133MHz, 4260MHz, 4440MHz, 4460MHz, 4440MHz, 4460MHz 4800MHz. Sama ada kegunaan harian atau keperluan prestasi tinggi

Bercakap tentang "pinggan pembunuh babi", semua orang mesti membencinya dengan gatal. Dalam jenis penipuan temu janji dalam talian dan perkahwinan ini, penipu akan mencari mangsa lebih awal yang mudah jatuh hati, dan mereka selalunya gadis yang tidak bersalah, baik hati dan berkelakuan baik dengan fantasi indah tentang cinta. Untuk melawan penipu ini selama 500 pusingan, "Kucing Turing", seorang yang terkenal dalam kalangan teknologi di Stesen B, melatih AI yang kerap membuat jenaka lucu dalam sembang, malah lebih baik daripada yang sebenar. orang. Akibatnya, dengan operasi AI, penipu telah dikelirukan oleh wanita palsu ini dan terus memindahkan 520 kepada "dia". Apa yang lebih lucu ialah selepas mendapati bahawa penipu itu tidak mempunyai peluang untuk mengambil kesempatan ke atasnya, dia bukan sahaja mematahkan pembelaannya, tetapi dia juga diberi "petikan terkenal" oleh AI: Sebaik sahaja video itu keluar, ia segera menjadi viral, dan rakan-rakan melayari di stesen B semuanya tertipu.
