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.