Multithreading va konkurentlik

Daraja: Ilg'or

Bir vaqtda bir nechta ishni bajarish uchun oqim (thread) ishlatiladi. Qo'lda `new Thread` o'rniga `ExecutorService` yoki `CompletableFuture` afzal. Umumiy o'zgaruvchiga bir nechta oqim tegsa — race condition; buni `synchronized`, atomik turlar yoki immutable obyektlar bilan hal qilinadi.

Tushuntirish

Bir vaqtda bir nechta ishni bajarish uchun oqim (thread) ishlatiladi. Qo'lda `new Thread` o'rniga `ExecutorService` yoki `CompletableFuture` afzal. Umumiy o'zgaruvchiga bir nechta oqim tegsa — race condition; buni `synchronized`, atomik turlar yoki immutable obyektlar bilan hal qilinadi.

Kod misoli

ExecutorService pool = Executors.newFixedThreadPool(4);

List<Future<String>> natijalar = new ArrayList<>();
for (String url : urls) {
    natijalar.add(pool.submit(() -> yukla(url)));
}
for (Future<String> f : natijalar) System.out.println(f.get());
pool.shutdown();

// CompletableFuture bilan
CompletableFuture<String> cf = CompletableFuture
        .supplyAsync(() -> yukla(url))
        .thenApply(String::trim)
        .exceptionally(e -> "xato: " + e.getMessage());

AtomicInteger hisob = new AtomicInteger();   // xavfsiz sanagich

Keng tarqalgan xatolar

Mashqlar

Teglar: thread, concurrency

Interaktiv ko'rinish (viktorina, izohlar, tarix)