Współbieżność w Javie

III rok Informatyka


Laboratorium 1

  1. Wątki
    • różnica pomiędzy wątkiem i procesem
    • kernel threads vs. user threads
    • Leightweight Process LWP; modele mieszane
    • standard POSIX threads

  2. Wątki w javie

    O wątkach w javie po polsku

    • wbudowane w język
    • dwa rodzaje implementacji
      • Przez dziedziczenie z klasy Thread

        Klasa:

        class MyThread extends Thread {
             . . .
             public void run() {
                  . . .
             }
        }
        
        Tworzenie obiektu i uruchamianie wątku:
        MyThread t = new MyThread();
        t.start();
        
      • Przez implementację interfejsu Runnable

        Klasa:

        class MyThreadR implements Runnable {
             . . .
             public void run() { 
                  . . . 
             } 
        }
        
        Tworzenie i uruchamianie:
        MyThreadR r = new MyThreadR();
        Thread t = new Thread(r);
        t.start();
        
    • metoda run()
    • klasa Thread
      • konstruktory
        public Thread()
        public Thread(Runnable target)
        public Thread(Runnable target, String name)
        public Thread(String name)
        public Thread(ThreadGroup group, Runnable target)
        public Thread(ThreadGroup group, Runnable target, String name)
        public Thread(ThreadGroup group, Runnable target, String name)
        
      • Nadawanie nazw wątkom
        public final String getName()
        public final void setName(String name)
        
      • Wstrzymywanie i wznawianie
        public void start()
        public final void stop() 
        public final void stop(Throwable obj)
        public void destroy()
        
        stop rzuca wyjątek ThreadDeath do wątku, żeby umożliwic "sprzątanie". WAŻNE: blok obsługi wyjątku ThreadDeath musi ponownie rzucać ten wyjątek!

      • Referencja do obiektu aktualnie wykonującego się wątku
        public static Thread currentThread()
        
    • Cykl życia wątku, stany wątku

  3. Szeregowanie
    • pojęcia wywłaszczania, podziału czasu
    • priorytety

  4. Szeregowanie wątkow w Javie
    • w każdym momencie, spośród kilku wątkow w stanie RUNNABLE wybierany jest ten o najwyższym priorytecie
    • wykonywany wątek może być wywłaszczony, jeśli pojawi się wątęk o wyższym priorytecie, gotowy do wykonania
    • jeśli wiele wątków ma ten sam priorytet, wybierany jest jeden z nich, wg kolejności (round-robin)
    • na niektórych systemach może być zaimplementowany podział czasu (wątki sa wywłaszczane po upływie kwantu czasu)

  5. Wyścig
    • więcej niż jeden wątek korzysta jednocześnie z zasobu dzielonego, przy czym co najmniej jeden próbuje go zmienić
    • przyczyna niedeterministycznego zachowania się programu
    • może prowadzić do trudnych do wykrycia błędów
    • pojęcie thread-safety (bezpieczeństwo dla wątków)
    • Szkielet programu do wykonania ćwiczenia


balis at wszib.edu.pl