java 2

Von Oracle Certified Professional Java SE 8 Programmer 2 Study guide - Jeanne Boyarsky and Scott Selikoff

Von Oracle Certified Professional Java SE 8 Programmer 2 Study guide - Jeanne Boyarsky and Scott Selikoff


Kartei Details

Karten 500
Sprache Deutsch
Kategorie Informatik
Stufe Universität
Erstellt / Aktualisiert 03.03.2020 / 22.06.2022
Weblink
https://card2brain.ch/box/20200303_java_2
Einbinden
<iframe src="https://card2brain.ch/box/20200303_java_2/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Garantiert Java die Reihenfolge in der Threads ausgeführt werden?

Nein

Wie kann man eine Task/arbeit definieren die eine Thread-instanz ausführt?

Entweder: Runnable object/lambda expression dem Thread constructor übergeben

oder: Classe erstellen die Thread extended und run() überschreibt

Was passiert hier? Was ist besonders?

new PrintData().run();
(new Thread(new PrintData())).run();
(new ReadInventoryThread()).run();

Der main-thread wird genutzt für die Threads, diese werden also nicht extra gestartet. d.h. es wird gewartet bis run fertig ist bevor zur nächsten Zeile gegangen wird.

Was sollte man eher nu8tzen: runnable implementieren oder thread extenden?

Runnable implementieren

Warum ist es besser ein runnable zu implementieren als einen thread zu extenden?

  • Wenn man einen Thread extended kann man eigene Thread rules angeben (brazucht man nur selten)=
  • java supportet keine multiple inheritance, implement runnable erlaubt es dann aber andere klassen zu extenden
  • Concurrency API klassen arbeiten mit Runnables

Was für eine exception wirft Thread.sleep()?

Eine InterruptedException

Abstrakt: Was macht der ExecutorService?

Erstellt und managed Threads. Zahlreiche Features wie z.B. thread pooling, scheduling, ..

Wie erstellt man eine neue Instanz des ExecutorServices?

Mit einer Factory aus der Concurrency Api, z.B.:

Executors.newSingleThreadExecutor();

Was macht folgender Codeabschnitt?: Wann wird end ausgegeben?

ExecutorService service = null;
try {
service = Executors.newSingleThreadExecutor();
System.out.println("begin");
service.execute(() -> System.out.println("Printing zoo inventory"));
service.execute(() -> {for(int i=0; i<3; i++)
System.out.println("Printing record: "+i);}
);
service.execute(() -> System.out.println("Printing zoo inventory"));
System.out.println("end");
} finally {
if(service != null) service.shutdown();
}

ERstellt einen ExecutorService und führ 3 threads aus. Am Ende wird der service beendet. Wann End ausgegeben wird weiß man nicht da das ein anderer Thread ist und nicht vom singleTHreadExecutorService verwaltet wird.l

Was macht der single-thread-executor?

Führt die Threads in der Reihenfolge aus in der sie ihm übergeben werden

Was passiert wenn man bei einem ExecutorService vergisst ihn zzu shutdown() - en?

Die applikation wird niemals terminiert

Wie ist der life cycle eines ExecutorServices?

  • ACTIVE (accepts new tasks, executes tasks, isShutdown() = false, isTerminated() = false)
    • shutdown()
  • SHUTTING DOWN(Rejects new tasks, executes tasks, isShutdown() = true, isTerminated() = false)
    • all tasks finished
  • SHUTDOWN(rejects new tasks, no tasks running, isShutdown=true,isTerminated()=true)

Was macht shutdownNow() bei eienem ExecutorService?

Versucht alle Tasks zu stoppen (kann sein dass das nicht geht), returned List<Runnable> mit tasks die nie gestartet wurden

Implementiert ExecutorService AutoClosable ( und kann damit in try-with-resources ausgeführt werden)?

Nein

Was gibt es für Funktionen im ExecutorService um tasks zu submitten?

  • void execute(Runnable command) 
  • Future<?> submit(Runnable task)
  • <T> Future<T> submit(Callable<T> task)
  • <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException
  • <T> T invokeAn(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException

Laufen die invokeAll()/invokeAny()-Methoden des ExecutorServices snyhcron oder assynchron?

Synchron, Kontrolle wird erst an das enclosing programm zurückgegeben wenn die results availiable sind

Was gibt es für Funktioinen bei Futures die etwas über den state des Tasks aussagen?

  • boolean isDone()
  • boolean isCancelled()
  • boolean cancel()
  • V get()   --> result der task, wartet endlos bis es eins gibt
  • V get(long timeout, TimeUnit u) --> ", wartet bis timeout, dann TimeoutException

Was gibt es für TimeUnit-values (enum)?

  • TimeUnit.NANOSECONDS
  • TimeUnit.MICROSECONDS
  • TimeUnit.MILLISECONDS
  • TimeUnit.SECONDS
  • TimeUnit.MINUTES
  • TimeUnit.HOURS
  • TimeUnit.DAYS

Wie kann man bei einem Runnable einen Wert zruückgeben?

Gar nicht, man kann aber ein Callable verwenden

Wie ist die definiton des Callable interfaces? 

@FunctionalInterface public interface Callable<V> {

  V call() throws Exception;

}

Was bringt das Callable-Interface?

Man kann, mit der Methode call, auch werte zurückgeben (kann runnable nicht)

Kann der ExecutorService mit Callables umgehen?

Ja, es gibt eine überladene submit-methode

Kann Callable Exceptions werfen?

Ja, auch checked exceptions

Was compiled hier?

service.submit(() -> {Thread.sleep(1000); return null;});
service.submit(() -> {Thread.sleep(1000);});

Die erste. Die zweite nicht da ohne returntype ein runnable verwendet wird, thread.sleep aber die checked exception InteruptedException wirft, Runnables aber keine checked exceptions können (Callables schon)

Wie kann man auf die beendigung von Threads warten?

  • Auf results warten -> get()
  • shutdown() und dann awaitTermination(long timeout, TimeUnit unit)

Wie können wir mit dem ExecutorServices tasks irgendwann in der Zukunft ausführen oder sie regelmäßuig ausführen? ( Welcher ExecutorService)

Mit dem SCheduledExecutorService

Wie bekommen wir eine neue Instanz des ScheduledExecutorServices?

ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();

Was gibt es für schedule()_Methoden beim ScheduledExecutorService?

  • schedule(Callable<V> callable, long delay, TimeUnit unit)
  • schedule(Runnable command, long delay, TimeUnit unit)
  • scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
  • scheduleAtFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

Was passiert bei scheduled() im ScheduledThreadExecutor wenn kein Tread availiable ist oder der ScheduledExecutorServices schon geshutdowned wurde?

die ausführung wird delayed bzw. die scheduled task wird discarded

Was ist der unterschied zwischen scheduledAtFixedRate() und scheduledAtFixedDelay() im ScheduledThreadExecutor?

scheduledAtFixedRate submitted die tasks dem executor egal wann die vorherige Tasks gefinished wurde. scheduledAdFixedDelay() fügt die task erst hinzu nachdem die vorherige beendet wurde

Warum aktzeptieren scheduledAtFixedRate und scheduledAtFixedDelay des ScheduledExecutorServices keine Callables?

Weil sie potentiell ewig laufen und dadurch eine unendliche liste von futures erzeugen würden

Was ist ein Threadpool?

Ein pool von threads die vorinstanziiert sind und bestimmte aufgaben lösen können

Wie bekommt man eine instanz eines Threadpools?

  • ExecutorService.newCachedThreadPool()
  • ExecutorService.newFixedThreadPool(int nThreads)
  • ExecutorService.newScheduledThreadPool(int nThreads)

Was macht newChachedThreadPool(), wann verwendet man ihn?

ERzeugt threadpool von unlimitierter Größe, jedes mal wenn ein neuer Thread benötigt wird 8bspw. wenn alle beschäftigt sind) wird ein neuer erstellt. Genutzt für pools die viele kurzlebige, asynchrone tasks abarbeiten. Für langlebige nicht geeignet -> kann in vielen threads resultieren

Was macht newFixedThreadPool?

Nimmt anzahl von THreads und allokiert diese. Wenn es mal mehr threads gibt als allokiert wurden müssen diese warten.

Was macht newScheduledThreadPool?

Das gleiche wie newFixedThreadPool, returned aber ScheduledExecutorService und kommt mit gescheduled Tasks klar. Wenn ein thread gefinished wird, wird er dem pool zurückgegeben und ist für neue tasks bereit, blockt also nicht ewig

Was gibt es für Atomic classes?

  • AtomicBoolean
  • AtomicInteger
  • AtomicIntegerArray
  • AtomicLong
  • AtomicLongArray
  • AtomicReference
  • AtomicReferenceArray

Wie bekommt man den Wert einer AtomicClass?

get()

Wie setzt man den Wert einer AtomicClass?

set()

Wie setzt man den Wert einer AtomicClass und bekommt den alten Wert?

getAndSet()