Inhaltsverzeichnis
Java verwendet Multithreading, um die Schleifeneffizienz zu beschleunigen
Thread-Pool mit Sperrung
Jeder Dienst ist für ein wiederholtes Geschäft verantwortlich. Beispielsweise muss eine for-Schleife verwendet werden, um eine Sammlung gespeicherter IDs zu durchlaufen und für jede ID etwas zu erstellen.
Heim Java javaLernprogramm So lösen Sie das Multithreading-Problem in der Java-for-Schleife

So lösen Sie das Multithreading-Problem in der Java-for-Schleife

Apr 29, 2023 pm 04:55 PM
java for

    Java verwendet Multithreading, um die Schleifeneffizienz zu beschleunigen

    Thread-Pool mit Sperrung

    Beteiligte Kenntnisse: Executors (Thread-Pool), CountDownLatch (Sperrung)

    Vorteile: prägnanter Code, leicht lesbar, stabile Leistung;

    Nachteile: Der von Executors erstellte Thread-Pool ist öffentlich. Wenn diese Schleifen-Multithreading-Methode an mehreren Stellen verwendet wird, werden Thread-Pool-Ressourcen geraubt und die Laufgeschwindigkeit wird ebenfalls verringert for-Schleife

    Jeder Dienst ist für ein wiederholtes Geschäft verantwortlich. Beispielsweise muss eine for-Schleife verwendet werden, um eine Sammlung gespeicherter IDs zu durchlaufen und für jede ID etwas zu erstellen.

    Aber die Verwendung eines einzelnen Threads zum Ausführen von Aufgaben verschwendet viel Zeit mit dem Warten auf die Ausführung der letzten Aufgabe, und sobald während einer Ausführung ein Fehler gemeldet wird, wird die Ausführung der Aufgabe gestoppt, was offensichtlich nicht unseren Anforderungen entspricht.

    Verwenden Sie in diesem Fall Multithreading in der for-Schleife.

    import java.util.*;
    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
     
    public class test{
     
        /** 固定的线程池(当前线程池大小为5) */
        private static final ExecutorService executor = Executors.newFixedThreadPool(5);
        
        public static void main(String[] args) throws Exception {
            /**
             *  两个要点:
             *  1.用Executors实现固定大小的线程池,从而达到控制硬件资源消耗的目的。
             *  2.用CountDownLatch(闭锁),来确保循环内的多线程都执行完成后,再执行后续代码
             */
            
            // 初始化数据
            List<Map<String,Object>> list = new ArrayList<>();
            for(int i=0;i<50;i++){
                Map<String,Object> object = new HashMap<>();
                object.put("index",i);
                list.add(object);
            }
     
            // 初始化计时器
            CountDownLatch cdl = new CountDownLatch(list.size());
            System.out.println("====== 线程开始 =====");
     
            // 遍历
            for(Map<String,Object> object:list){
                // 开启线程
                executor.submit(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread t = Thread.currentThread();
                            String name = t.getName();
                            // 模拟运行耗时
                            Thread.sleep(500);
                            System.out.println(name+":执行到"+object.get("index"));
                            object.put("status","已经执行过");
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        // 闭锁-1
                        cdl.countDown();
                    }
                });
            }
            
            // 调用闭锁的await()方法,该线程会被挂起,它会等待直到count值为0才继续执行
            // 这样我们就能确保上面多线程都执行完了才走后续代码
            cdl.await();
            
            //关闭线程池
            executor.shutdown();
            System.out.println("====== 线程结束 =====");
     
            // 校验多线程正确性
            for(Map<String,Object> object:list){
                System.out.println(object.get("index") + ":" + object.get("status"));
            }
     
        }
    }
    Nach dem Login kopieren

    Das obige ist der detaillierte Inhalt vonSo lösen Sie das Multithreading-Problem in der Java-for-Schleife. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    AI Hentai Generator

    AI Hentai Generator

    Erstellen Sie kostenlos Ai Hentai.

    Heißer Artikel

    R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
    2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    Repo: Wie man Teamkollegen wiederbelebt
    4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
    3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Quadratwurzel in Java Quadratwurzel in Java Aug 30, 2024 pm 04:26 PM

    Quadratwurzel in Java

    Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

    Perfekte Zahl in Java

    Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

    Zufallszahlengenerator in Java

    Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

    Weka in Java

    Armstrong-Zahl in Java Armstrong-Zahl in Java Aug 30, 2024 pm 04:26 PM

    Armstrong-Zahl in Java

    Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

    Smith-Nummer in Java

    Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

    Fragen zum Java Spring-Interview

    Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

    Brechen oder aus Java 8 Stream foreach zurückkehren?

    See all articles