java 2 3
fdsa
fdsa
-
- 1 / 496
-
Lernkarten
How to create an ExecutorService for creating a thread pool that reuses a fixed number of threads operationg of a shared unbounded queue?
ExecutorService.newFixedThreadPool(int)
How to create an ExecutorService for creating a thread pool that can schedule commands to run after a given delay or to execute periodically?
ScheduledExecutorService.newScheduledThreadPool(int)
When is the usage of a newCachedThreadPool-Executor recommended?
For pools that require executing many short-lived asynchronous task.
What are the three main atomic-classes?
AtomicBoolean, AtomicInteger, AtomicLong
What does an monitor support?
mutal exclusion
Is this threadsafe?
for(int i=0; i<10; i++= {
synchronized(manager) {
service.submit(() -> manager.incrementAndReport());
}
}
No, we've synchronized the creation of the threads but not the execution ot the threads
What object is uses as a monitor for static synchronized methods?
The classObject, f.e. SheepManager.class
public static synchronized void printdayswork() in the class SheepManager would be the same as:
synchronized(SheepManager.class)
Which framework could we use when we want to check wheter a lock is avaiable and, if its not, perform some other task?
Lock-Framework
With the LockFramework: Can we lock any object?
No, just the ones which implement the Lockinterface
Abstract: How to use the lockFramework?
create an instance of lock that all threads have acces to. Each thread then calls lock() before it enters the protected code and calls unlock() before it exits the protected code
Whats with the fairnessparameter in a ReentrantLock?
default false but if set true then the lock will usally be granted to each thread in the order it was requested
What happens if you release a lock which you dont have?
IllegalMonitorStateException
Whats the Signature of requesting a lock and block until the lock is acquired in the lock-interface?
public void lock()
Whats the Signature of releasing a lock in the lock-interface?
public void unlock()
Whats the Signature of requesting a lock and returning immedately, returning a boolean indicating whether the lock was successfully acquired in the lock-interface?
public boolean tryLock()
Whats the Signature of requesting a lock and block up to the specified time until the lock is required, returning a boolean indicating wheter the lock was successfully acquired in the lock-interface?
public boolean tryLock(long time, TimeUnit unit)
Whats wrong here?
Lock lock = new ReentrantLock();
if(lock.tryLock()) {
try {
lock.lock();
} finally {
lock.unlock();
}
}
Two times locked but only one released
What are the differences between ReentrantLock and a synchronized block?
the support the same futures but but ReentrantLock adds following:
- Ability to request a lock without blocking
- Ability to reqeust a lock while blocking for a specfied amount of time
- create lock with fairnessproperty
What are the constructors of a CyclicBarrier?
- CyclicBarrier(int threads)
- CyclicBarrier(int threads, Runnable barrierAction)
What are the most important methods of a CyclicBarrier?
- public int await() throws InterruptedException,BrokenBarrierException
- public int await(long timeout, TimeUnit unit) throws InterruptedException, BrokenBarrierException,TimeoutException
- public void reset()
- public int getNumberWaiting()
What happens if we have a fixedThreadPool with two threads but wating for 3 threads within a cyclicBarrier?
The code will hang indefinitely
When does a memorry consistency error occur?
when two threads ahve incosistent views of what should be the same data
What will happen here?
var foodData = new HashMap<String,Integer>();
foodData.put("penguin",1);
foodData.put("flamingo",2);
for(String key: foodData.keySet())
foodData.remove(key);
A ConcurrentModificationException will be thrown
What er the concurrenct counterparts to TreeSet and ThreeMap?
ConcurrentSkipListSet and ConcurrentSkipListMap
Whats special about CopyOnWriteArrayList and CopyOnWriteArraySet?
tey copy all of their elements to a new underlying structure anytime an element is added, modified or removed from the collection
What does "modifing" mean in the context of CopyOnWriteArrayList and copyOnWriteArraySet?
when the reference in the collection is changed
What happens here?
List<Integer> favNumbers = new CopyOnWriteArrayList<>(List.of(4,3,42));
for(var n: favNumbers) {
System.out.print(n + " ");
favNumbers.add(9);
}
System.out.println();
System.out.println("Size: " + favNumbers.size());
4 3 42
Size 6
What is special about BlockingQueue?
Its like a regular queue but it includes Methods that will wait a specfic amount of time to complete an operation
Whats the syntax for adding an item to the queue, wating the specified time and returning false if the time elapses before space is availiable in BlockingQueue?
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException
Whats the syntax for retrieving and removing an item from the queue, waiting for the specified time and returing null if the time elapses before the item is availiable in BlockingQueue?
E poll(long timeout, TimeUnit unt) throws InterruptedException
Whats a difference between concurrent and snychronized collections regarding the exceptions?
unlike the concurrent collections the snychronized collections also throw an exception if they are modified witihn an iterator by a single thread
How to create a parallelStream form an existing stream?
Calling parallel()
How to create a parallel stream from a collection?
calling parallelStream()
When Stream.concat is called on two parallel streams, is the result still parallel?
yes
When Stream.flatmap is called on two parallel streams, is the result still parallel?
No
What does parallel decomposition mean?
process of taking a task, breaking it up into smaller pieces that can be performed concurrently and then reassembling the results
Does forEachOrdered makes the whole stream serialized?
No
What does the streamoperation reduce() do?
combines a stream into a single object
What is the syntax of stream.reduce with parallel streams?
<U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner)
Why is this problematic?
System.out.println(List.of(1,2,3,4,5,6)
.parallelStream()
.reduce(0, (a,b) -> (a-b)));
It may output -21,3 or some other value