Kom igångKom igång gratis

Optimera bildbehandling med parallella strömmar

Du arbetar med en bildbehandlingsapplikation som applicerar filter på stora mängder bilder. Applikationen bearbetar för närvarande bilder sekventiellt, vilket börjar bli en flaskhals i takt med att antalet bilder ökar. Din uppgift är att implementera en lösning med parallella strömmar för att förbättra prestandan.

Klassen Image har lästs in åt dig.

Den här övningen är en del av kursen

Optimera kod i Java

Visa kurs

Övningsinstruktioner

  • Konvertera strömmen till en parallell ström för snabbare bearbetning.
  • Applicera filter på alla bilder i strömmen.
  • Samla bilderna i en enda lista.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

public class ImageProcessor {
    public static void main(String[] args) {
        List images = generateImages(500);
        List result = images
            // Use a parallel stream for multi-thread processing
            .____()
            // Apply filters to each image using `map()`
            .____(image -> applyFilters(image)) 
            // Collect images to a single list
            .____(Collectors.toList()); 
    }

    static Image applyFilters(Image image) {
        image = blur(image);
        image = sharpen(image);
        return image;
    }

    static Image blur(Image image) {
        process(); return new Image(image.id, image.width, image.height);
    }

    static Image sharpen(Image image) {
        process(); return new Image(image.id, image.width, image.height);
    }

    static void process() {
        for (int i = 0; i < 100000; i++) {
       		double result = Math.sin(i) * Math.cos(i);
        }
    }

    static List generateImages(int count) {
        List list = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            list.add(new Image(i, 1920, 1080));
        }
        return list;
    }
}
Redigera och kör kod