3 - J (suc1)

3 - J (suc1)

3 - J (suc1)


Kartei Details

Karten 68
Sprache Deutsch
Kategorie Scherzfragen
Stufe Grundschule
Erstellt / Aktualisiert 06.01.2014 / 15.01.2014
Weblink
https://card2brain.ch/box/3_j_suc1
Einbinden
<iframe src="https://card2brain.ch/box/3_j_suc1/embed" width="780" height="150" scrolling="no" frameborder="0"></iframe>

Klassen vervollständigen...

<OR mapping>

- Attribut id einfügen (als Integer)

- Standardkonstruktor implementieren

- Set- und Get-Methoden, serialisierbar machen

- Annotationen einfügen

- implements serializable

Bidirektionale assiziation (jede tabelle hat ein attribut welches auf die andere tabelle zeigt)

<OR mapping>

zwei sichten auf eine relation!!

@OneToMany (mappedBy="verleger") => auf der NICHT OWNER seite

verleger = attribut auf der ManyToOne seite

In der aktuellen JPA-Version muss bei einer 1:n-Relation immer die Many-Seite der Relationsowner sein (folglich muss mappedBy Parameter auf der 1-Seite angegeben werden, dort wo die liste mit mehreren werten ist.)

Methoden des EntityMangers

<OR mapping>

void persist (Object entity)

void remove (Object entity)

void flush ()

boolean contains (Object entity)

<T> T merge (T entity) => update

<T> T find (Class<T> entityClass, Object primaryKey)

Query createQuery(String qlString)

Query createNativeQeury(String sqlString)

Datenbankabfragen mit JPA

<OR mapping>

EntityManager em = JpaUtil.getEntityManagerFactory().createEnitityManager();  

Query q = em.createQuery("SELECT p FROM Person p");

Person p = (Person) q.getSingleResult(); =>  einzelnes resultat

List<Person> pList = q.getResultList();

TypedQuery<X>

<OR mapping>

casten nicht nötig

EntityManager em = JpaUtil.getEntityManagerFactory().createEnitityManager();

TypedQuery<Person> tQuery = em.createQuery("SELECT p FROM Person p", Person.class);

auslesen:

Person p = tQuery.getSingleResult();

List<Person> pList = tQuery.getResultList();

for (Person p: pList){

System.out.println(p.getName() + " " + p.getVorname());

}

Java Persistence Query Language (JPQL)

<OR mapping>

- erinnert an SQL, ist jedoch im Gegensatz zu SQL voll objektorientiert  

- ist nicht case sensitive – abgesehen von Klassen- und Attributnamen

- Eine JPQL-Abfrage muss mindestens ein SELECT- und ein FROM-Block haben

SELECT p FROM Person p WHERE p.name='Meier' AND p.vorname LIKE '%and'

Parallele Ausführung

<Parallele Prozesse und Multithreading>

Parallele Ausführung bedeutet, dass in einem Prozess mehrere Kontrollflüsse existieren, die parallel ausgeführt werden

Voraussetzungen für parallele Ausführung

<Parallele Prozesse und Multithreading>

das Mehrprozessorsystem und

die Unterstützung durch das Betriebssystem

Betriebssystem muss in der Lage sein, die Ausführung auf mehrere Prozessor-Einheiten zu verteilten und zu verwalten => scheduler

Prozess, eigenschaften

<Parallele Prozesse und Multithreading>

Ein Prozess ist "ein Programm in Ausführung"

Ein Prozess muss in seiner Ausführung unterbrechbar sein (betriebsmittel entzogen)

darf gar nicht merken, dass er unterbrochen wurde

muss, nachdem er die Betriebsmittel wieder bekommen hat, genau dort weiterfahren können, wo er unterbrochen wurde

schwergewichtiger prozess

<Parallele Prozesse und Multithreading>

Ein klassischer Prozess (Betriebssystem-Prozess) stellt sowohl für das Memory-Management als auch für Scheduling eine Einheit dar und wird als ein schwergewichtiger Prozess bezeichnet

leichtgewichtiger Prozess

<Parallele Prozesse und Multithreading>

Moderne Betriebssysteme haben neben Prozessen auch Threads:

in einem Prozess können mehrere Threads laufen

der Kontextwechsel eines Threads ist weniger aufwendig, da nicht alles ausgelagert werden muss

Ein neuer Thread braucht

<Parallele Prozesse und Multithreading>

einen eigenen Stack (lokale Variablen, Rücksprungadressen)

einen eigenen Stackzeiger (Stack-Pointer) 

einen Satz von Register

einen eigenen Befehlszeiger (Instruction-Pointer)

 

 

Gemeinsam für alle Threads eines Prozesses sind

<Parallele Prozesse und Multithreading>

Programmcode

Prozessspezifische Daten

Datei-Informationen

"globale" Daten

Ein Thread hat folgende Zustände

<Parallele Prozesse und Multithreading>

neu bereit für die Ausführung in der Ausführung blockiert tot

Die Zustandsübergänge können

durch entsprechende Methodenaufrufe (z. B. sleep) im Programm und

durch das Betriebssystem (in Java JVM)

Der Zustand neu bedeutet

<Parallele Prozesse und Multithreading>

dass der Thread durch den new-Operator erzeugt wurde und sich in seinem Anfangszustand befindet

der Thread ist noch nicht lauffähig

seine Datenfelder und Methoden können angesprochen werden

Der Zustand tot bedeutet

<Parallele Prozesse und Multithreading>

dass der Thread seine Arbeit erledigt hat

seine Datenfelder und Methoden können angesprochen werden, ausser die Methode run

Zustandsübergänge aus folge von methodenaufrufen

<Parallele Prozesse und Multithreading>

bild

Zustandsübergänge hervorgerufen durch VM

<Parallele Prozesse und Multithreading>

bild

Threads in Java

<Parallele Prozesse und Multithreading>

die Klasse java.lang.Thread und

die Schnittstelle java.lang.Runnable  

Klasse thread fähig machen

<Parallele Prozesse und Multithreading>

die generierende Klasse wird von der Klasse Thread abgeleitet, oder

die generierende Klasse implementiert die Schnittstelle Runnable

Modthode run()

Beenden der Ausführung

<Parallele Prozesse und Multithreading>

Durch Aufruf der Methode interrupt und isInterrupted

Durch Einsatz von privaten Datenfelder

Zugriff auf gemeinsame Ressourcen

<Parallele Prozesse und Multithreading>

Falls ein Prozess / Thread auf gemeinsame Ressourcen zugreift und sie manipuliert, nennt man das race condition (auf Deutsch: Wettkampfbedingung)

Der Abschnitt, in dem die gemeinsamen Daten manipuliert werden, wird kritischer Abschnitt genannt.

Der Zugriff auf einen solchen kritischen Abschnitt muss gegenseitig ausschliessend (mutual exclusion) erfolgen: zu einem Zeitpunkt darf sich nur ein Prozess im kritischen Abschnitt befinden

Vor dem Eintritt in einen solchen kritischen Abschnitt muss der Prozess um "Erlaubnis fragen"

Das Monitorkonzept (synchronized)

<Parallele Prozesse und Multithreading>

 Wesentliche Eigenschaften eines Monitors:

Kritische Abschnitte, die auf denselben Daten arbeiten, sind Methoden eines Monitors

Ein Prozess betritt einen Monitor durch Aufruf einer Methode des Monitors

Monitor für synchronisierte Klassenmethoden 

<Parallele Prozesse und Multithreading>

(ein Monitor pro klasse)

Wenn eine oder mehrere Klassenmethoden mit dem Schlüsselwort synchronized versehen werden, wird ein Monitor um diese Methoden "herum gebaut"

Die synchronisierten Klassenmethoden werden dadurch die Methoden des Monitors

Zu einem bestimmten Zeitpunkt kann nur ein Thread eine der Methoden des Monitors (synchronisierte Klassenmethoden) ausführen

Für alle synchronisierten Klassenmethoden einer Klasse wird ein Monitor angelegt, welcher den Zugriff auf diese Methoden überwacht (ein Monitor pro Klasse)

Monitor für Instanzmethoden 

<Parallele Prozesse und Multithreading>

(ein Monitor pro Instanz der Klasse vorhanden)

Falls eine oder mehrere Instanzmethoden mit dem Schlüsselwort synchronized versehen werden, so hat jede Instanz dieser Klasse einen eigenen Monitor, welcher den Zugriff auf die synchronisierten Instanzmethoden überwacht

Somit ist für die synchronisierten Instanzmethoden einer Klasse ein Monitor pro Instanz der Klasse vorhanden

Synchronisierten von einzelnen Codeblöcken

<Parallele Prozesse und Multithreading>

synchronized (this) { // kritischer Abschnitt }

Synchronisation und Schlüssel (etwas das nur einmal vorkommt)

<Parallele Prozesse und Multithreading>

Welches Objekt eignet sich als Schlüssel?

Instanz der Klasse Class

Ein übergebenes Schlüssel-Objekt

Die Referenz auf das aktuelle Objekt (this)

Der Schlüssel, der in der Regel von mehreren Instanzen gebraucht wird, darf nur einmal Vorkommen!

Executor Framework, Threadpool

<Parallele Prozesse und Multithreading>

Der Threadpool ist eine gute Lösung in Applikationen, in denen eine grosse Anzahl von kurzlebigen und voneinander unabhängigen Aufgaben erledigt werden müssen

Typischer Anwendungsfall stellt der Server dar, bei dem jede Clientanfrage von einem Pool-Thread abgearbeitet wird

Der Threadpool ist keine gute Lösung in Applikationen, in denen eine kleine Anzahl aufwändiger und voneinander abhängigen Aufgabe erledigt werden müssen