Übung Java Lambda LockUtilhttps://www.std.ch/kurs-java-advanced-lernen-lambda-lock-util?&atomFri, 29 Mar 2024 04:54:49 +0000stack.ch
https://stack.ch/
791a4baa-ed88-11ee-8c11-005056bb85fbSimtech AG - Ausbildung - Java - Kurs Java Advanced - Kurs Java Advanced - Ressourcen - Kurs Java Advanced - Übungen Lambda & Stream API - Übung Java Lambda LockUtil
https://www.std.ch/kurs-java-advanced-lernen-lambda-lock-util
791a4d28-ed88-11ee-8c11-005056bb85fbFri, 29 Mar 2024 04:54:49 +0000Übung Java Lambda LockUtil
https://www.std.ch/kurs-java-advanced-lernen-lambda-lock-util
791a4e7b-ed88-11ee-8c11-005056bb85fbFri, 29 Mar 2024 04:54:49 +0000
https://www.std.ch/kurs-java-advanced-lernen-lambda-lock-util
791a4f7e-ed88-11ee-8c11-005056bb85fbFri, 29 Mar 2024 04:54:49 +0000Die folgenden Listings zeigen ein Lockable Interface, die Klasse LockUtil und ein Beispielprogramm. LockUtil bietet mit der Methode runLocked() die synchrone und damit concurrent Ausführung der implementierten Methode Lockable.runLocked(). Der synchrone Mechanismus basiert auf dem Concurrent Lock-Interface (e.g. ReentrantLock). Die Lock-Instanz wird durch die Methode Lockable.getLock() zur Verfügung gesellt:package ch.std.jpf2.lambda.lockutil.classic;
import java.util.concurrent.locks.Lock;
public interface Lockable<E> {
public abstract Lock getLock();
public abstract E runLocked() throws Exception;
}package ch.std.jpf2.lambda.lockutil.classic;
public class LockException extends Exception {
private static final long serialVersionUID = 5619158779338557977L;
public LockException() {
super();
}
public LockException(String message) {
super(message);
}
}package ch.std.jpf2.lambda.lockutil.classic;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockUtil {
public static Lock newLockInstance() {
return new ReentrantLock();
}
/**
* This methods waits until given lock is free.
*
* There is no timeout support and a deadlock may occure.
*
* @param lockable
*/
public static <E> E runLocked(Lockable<E> lockable) {
Lock lock = lockable.getLock();
if (lock == null) {
throw new NullPointerException("lock is null");
}
E obj = null;
try {
lock.lock();
obj = lockable.runLocked();
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
}
return obj;
}
}package ch.std.jpf2.lambda.lockutil.classic;
import java.util.concurrent.locks.Lock;
class TestLockable implements Lockable<String> {
private Lock testLock;
public TestLockable() {
this.testLock = LockUtil.newLockInstance();
}
@Override
public Lock getLock() {
return this.testLock;
}
@Override
public String runLocked() {
System.out.println("TestLockable.runLocked()");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "test";
}
}
public class TestLockUtil {
public static void main(String[] args) {
System.out.println("begin");
String result = LockUtil.runLocked(new TestLockable());
System.out.println("result = " + result);
System.out.println("done");
}
}
https://www.std.ch/kurs-java-advanced-lernen-lambda-lock-util
791a579e-ed88-11ee-8c11-005056bb85fbFri, 29 Mar 2024 04:54:49 +0000Die Dateien der Vorlage finden Sie auch hier
https://www.std.ch/kurs-java-advanced-lernen-lambda-lock-util
791a5cc0-ed88-11ee-8c11-005056bb85fbFri, 29 Mar 2024 04:54:49 +0000Die Vorlage soll nun durch ein funktionale Lösung basierend auf Lambda Expressions umprogrammiert werden. Laden Sie die Klassen der Vorlage in Ihre Entwicklungsumgebung (Template) und führen Sie das Programm aus. Kopieren Sie das Package und planen Sie das Refactoring für die Lambda Lösung. Beachten Sie auch den möglichen Einsatz des Callable Interfaces.
https://www.std.ch/kurs-java-advanced-lernen-lambda-lock-util
791a5e5b-ed88-11ee-8c11-005056bb85fbFri, 29 Mar 2024 04:54:49 +0000Eine mögliche Lösung mit Lockable FunctionalInterface finden Sie hier
https://www.std.ch/kurs-java-advanced-lernen-lambda-lock-util
791a6249-ed88-11ee-8c11-005056bb85fbFri, 29 Mar 2024 04:54:49 +0000Eine mögliche Lösung mit Callable FunctionalInterface finden Sie hierÜber uns
https://www.std.ch/about
Fri, 29 Mar 2024 04:54:49 +0000791a673c-ed88-11ee-8c11-005056bb85fbAktuell
https://www.std.ch/
Fri, 29 Mar 2024 04:54:49 +0000791a67eb-ed88-11ee-8c11-005056bb85fbAGB
https://www.std.ch/agb
Fri, 29 Mar 2024 04:54:49 +0000791a6890-ed88-11ee-8c11-005056bb85fbBildungswege
https://www.std.ch/bildungswege
Fri, 29 Mar 2024 04:54:49 +0000791a692b-ed88-11ee-8c11-005056bb85fbBlog
https://www.std.ch/blog
Fri, 29 Mar 2024 04:54:49 +0000791a69c9-ed88-11ee-8c11-005056bb85fbRufen Sie mich an
https://www.std.ch/callus
Fri, 29 Mar 2024 04:54:49 +0000791a6a69-ed88-11ee-8c11-005056bb85fbCharts
https://www.std.ch/charts
Fri, 29 Mar 2024 04:54:49 +0000791a6b13-ed88-11ee-8c11-005056bb85fbConsulting
https://www.std.ch/consulting
Fri, 29 Mar 2024 04:54:49 +0000791a6bb2-ed88-11ee-8c11-005056bb85fbKontakt
https://www.std.ch/contact
Fri, 29 Mar 2024 04:54:49 +0000791a6c5b-ed88-11ee-8c11-005056bb85fbAusbildung/Kurse
https://www.std.ch/education
Fri, 29 Mar 2024 04:54:49 +0000791a6cfe-ed88-11ee-8c11-005056bb85fbSoftware Engineering
https://www.std.ch/engineering
Fri, 29 Mar 2024 04:54:49 +0000791a6d9a-ed88-11ee-8c11-005056bb85fbFreelancer
https://www.std.ch/freelancer
Fri, 29 Mar 2024 04:54:49 +0000791a6e33-ed88-11ee-8c11-005056bb85fbImpressum
https://www.std.ch/impressum
Fri, 29 Mar 2024 04:54:49 +0000791a6edc-ed88-11ee-8c11-005056bb85fbKursleiter
https://www.std.ch/kursleiter
Fri, 29 Mar 2024 04:54:49 +0000791a6f78-ed88-11ee-8c11-005056bb85fbNetzwerk
https://www.std.ch/network
Fri, 29 Mar 2024 04:54:49 +0000791a718b-ed88-11ee-8c11-005056bb85fbReferenzen
https://www.std.ch/references
Fri, 29 Mar 2024 04:54:49 +0000791a7254-ed88-11ee-8c11-005056bb85fbSitemap
https://www.std.ch/sitemap
Fri, 29 Mar 2024 04:54:49 +0000791a7307-ed88-11ee-8c11-005056bb85fbTools
https://www.std.ch/tools
Fri, 29 Mar 2024 04:54:49 +0000791a73a5-ed88-11ee-8c11-005056bb85fbVision
https://www.std.ch/vision
Fri, 29 Mar 2024 04:54:49 +0000791a743e-ed88-11ee-8c11-005056bb85fb