Sobes.tech
Junior — Middle

Layihələrinizdə çoxmərhələliyi necə həyata keçirdiniz və hansı problemlərlə üzləşdiniz?

sobes.tech Süni İntellekt

AI-dan cavab

Layihələrimdə çox ipli işləməni həyata keçirmək üçün müxtəlif yanaşmalardan istifadə etmişəm:

  • Thread və Runnable — Java-nın əsas sinfləri, ip yaratmaq üçün.
  • ExecutorService — ip havzası, ipləri idarə etmək və yenidən istifadə etmək üçün.
  • Future və Callable — asinxron tapşırıqların nəticələrini almaq üçün.
  • Sinxronizasiya (synchronized, Lock) — ümumi resurslara girişin idarə olunması üçün.

Əsas qarşılaşdığım problemlər:

  • Yarış şərtləri (Race conditions) — bir neçə ip eyni zamanda paylaşılan məlumatları sinxronizasiya olmadan dəyişir.
  • Ölü kilidlər (Deadlocks) — iplər bir-birini gözləyir və resursları bloklayır.
  • Dəyişikliklərin görünüşü problemləri (Visibility issues) — bir ipdəki dəyişikliklər digərinə cache səbəbindən görünməyə bilər.

ExecutorService istifadə nümunəsi:

ExecutorService executor = Executors.newFixedThreadPool(2);

Callable<Integer> task = () -> {
    // Hesablama tapşırığı
    return 123;
};

Future<Integer> future = executor.submit(task);

try {
    Integer result = future.get();
    System.out.println("Nəticə: " + result);
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
}

executor.shutdown();

Bu yanaşma, ipləri səmərəli idarə etməyə və asinxron hesablamaların nəticələrini əldə etməyə imkan verir, sinxronizasiya problemlərini minimuma endirir.