concurrency: best practices - indicthreads.com...
TRANSCRIPT
![Page 1: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/1.jpg)
1
Concurrency: Best Practices
Pramod B Nagaraja
IBM India Pvt LTD
![Page 2: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/2.jpg)
2
Agenda Why Concurrency? Concurrency Panoramas Synchronization
When and What to synchronize Guidelines for designing Concurrent Applications Excessive Synchronization Synchronization Optimization Latches & Barriers
![Page 3: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/3.jpg)
3
1.0 Why Concurrency
Story so far….
Most of the applications ran on system with few processors
Relied on faster hardware, rather than Software Concurrency/Parallelism, for better performance
![Page 4: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/4.jpg)
4
1.0 Why Concurrency
…Current scenario
Moore's Law predicts that the number of transistors on a chip doubles every two years
Faster Dual core machines demand Concurrency
Multithreading is the pulse of Java
![Page 5: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/5.jpg)
5
2.O Concurrency Panoramas• Atomicity– Certain pieces of an application must all be
executed as one unit
![Page 6: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/6.jpg)
6
2.O Concurrency Panoramas Atomicity
synchronized int getBalance() {
return balance;
}
synchronized void setBalance(int x) {
balance = x;}
void deposit(int x) {
int b = getBalance();
setBalance(b + x);}
void withdraw(int x) {
int b = getBalance();
setBalance(b - x);}}
![Page 7: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/7.jpg)
7
2.O Concurrency Panoramas Visibility
− Changes that you make to a value to be visible precisely when you intend them to be
![Page 8: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/8.jpg)
8
2.O Concurrency Panoramas Visibilityclass LoopMayNeverEnd {
boolean done = false;
void work() {
while (!done) {
// do work
}
}
void stopWork() { done = true; } }
![Page 9: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/9.jpg)
9
3.0 Synchronization
Things which matter MOST should never be at mercy of things which matter LEAST
![Page 10: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/10.jpg)
10
3.1 When to Synchronize
Pitfalls when synchronizing: Forgetting to synchronize a resource that
should be synchronized Synchronizing the wrong resource Synchronizing too often
![Page 11: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/11.jpg)
11
3.2 What to Synchronize Not just the resource, but also the Transaction
involving the resource Pay attention to Data integrity at multiple
levels of granularity
![Page 12: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/12.jpg)
12
3.2 What to Synchronize
private int foo;
public synchronized int getFoo() {
return foo;
}
public synchronized void setFoo(int f) {
foo = f;
}
setFoo(getFoo() + 1); //not thread safe
![Page 13: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/13.jpg)
13
4. Guidelines for designing Concurrent Applications
4 common concurrency mechanisms generally used in combination with each other to safely access data from multiple threads− Dynamic Exclusion Through Implicit Locks− Structural Exclusion Through Confinement− Immutability− Cooperation
![Page 14: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/14.jpg)
14
4.1 Dynamic Exclusion Through Implicit Locks
Lock associated with an object is acquired when a method is declared synchronized.
public synchronized void setName(String name);
Limitation− When synchronization is used inappropriately or
excessively it causes poor performance and deadlock.
![Page 15: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/15.jpg)
15
4.1 Dynamic Exclusion Through Implicit Locks
Best Practice Tip Do not perform CPU intensive and I/O operations inside
synchronized method.
When possible synchronize on block of code instead of synchronizing entire method.
Ex: synchronize(lock) { //critical section guarded by lock}
![Page 16: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/16.jpg)
16
4.2 Structural Exclusion Through Confinement
Thread confinement : Access object from a single thread using thread-per-session approach
Instance confinement : Use encapsulation techniques to restrict access to object state from multiple threads
Method confinement : Do not allow an object to escape from method by referencing it through local variables
![Page 17: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/17.jpg)
17
4.2 Structural Exclusion Through Confinement
Limitations :− Confinement cannot be relied on unless a design
is leak proof Best Practice Tip :
Combine confinement with appropriate locking discipline
Use ThreadLocal variables to maintain Thread Confinement
![Page 18: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/18.jpg)
18
4.3 Immutability Immutable objects do not need additional
synchronizationPublic final class ImmutableClass {
private final int field1 = 100;
private final String field2=“FIN”;
………..
}
Inherent
ly Threa
d-safe
![Page 19: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/19.jpg)
19
4.3 Immutability
Limitation− In a software application only some classes can
be immutable. Best Practice Tip
− Even when class is not fully immutable, declare its non changeable fields as final to limit its mutability.
![Page 20: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/20.jpg)
20
4.4 Cooperation
Thread 1
Thread 2
Thread 2 - “I will meet your condition.”
STOP!! CONDITION NOT MET
Thread 1 cannot progress
CONDITION MET
Thread 1 can proceed
What is purpose of wait-and-notify mechanism?When one thread needs a certain condition to exist and another thread can create that condition then we use wait and notify methods.
![Page 21: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/21.jpg)
21
4.4 CooperationLimitation
− When there are multiple waiting threads, you cannot be certain which thread is woken up.
− Due to race conditions there could be missed or early notifications.
Best Practice Tip Safe to wake up all the threads using notifyAll() method instead
of waking an arbitrary thread using notify()
Sometimes condition that caused thread to wait is not achieved when wait() returns, therefore put wait() call in a while loop.
Wait() and notify() must always be called inside synchronized code.
![Page 22: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/22.jpg)
22
5. Excessive Synchronization
Poor performance Deadlock
Can occur when multiple threads each acquire multiple locks in different orders
![Page 23: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/23.jpg)
23
5.1 Deadlockpublic static Object cacheLock = new Object();
public static Object tableLock = new Object();
...
public void oneMethod() {
synchronized (cacheLock) {
synchronized (tableLock) {
doSomething(); } } }
Need not be this obvious !!!!
public void anotherMethod() { synchronized (tableLock) { synchronized (cacheLock) { doSomethingElse(); } } }
![Page 24: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/24.jpg)
24
5.1 Deadlockpublic void transferMoney(Account fromAccn, Account toAccn, Amount amnt) {
synchronized (fromAccn) { synchronized (toAccn) { if (fromAccn.hasSufficientBalance(amnt) { fromAccn.debit(amnt); toAccn.credit(amnt);}}}Thread A : transferMoney(accountOne, accountTwo, amount);
Thread B : transferMoney(accountTwo, accountOne, amount);
![Page 25: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/25.jpg)
25
5.1 DeadlockHow to avoid Deadlock
Avoid acquiring more than one lock at a time
Allow a thread to voluntarily give up its resources if a second level or successive lock acquisition fails, this is called Two Phase Locking
Never call a synchronized method of another class from a synchronized method
Follow a fixed order while acquiring and releasing locks
Induce Lock ordering, if required Object.identityHashCode() method
![Page 26: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/26.jpg)
26
5.1 DeadlockBanking example revisitedpublic void transferMoney(Account fromAccn, Account toAccn,Amount amnt) {Account firstLck, secondLck; if (fromAccn.accountNumber() < toAccn.accountNumber()) {
firstLck = fromAccn; secondLck = toAccn;
} else { firstLck = toAccn; secondLck = fromAccn; }
![Page 27: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/27.jpg)
27
5.1 Deadlock
synchronized (firstLck) {synchronized (secondLck) {
if (fromAccn.hasSufficientBalance(amnt){ fromAccn.debit(amnt); toAccn.credit(amnt); }
} } }
![Page 28: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/28.jpg)
28
6. Synchronization Optimization
JVM optimizes synchronization [under the hood]: Lock Elision Biased Locking Lock Coarsening Thread Spinning vs Thread Suspending
![Page 29: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/29.jpg)
29
6.1 Synchronization Optimization
Lock Elision :: Locks on local scope references can be elided
public String concatBuffer(String s1,String s2,String s3) {
StringBuffer sb = new StringBuffer();
sb.append(s1);
sb.append(s2);
sb.append(s3);
return sb.toString(); }
![Page 30: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/30.jpg)
30
6.2 Synchronization Optimization
• Biased Locking :: Most locks are never accessed by more than one thread during their life time
Release the lease only if another thread attempts to acquire the same lock
Default in Java 6 Hotspot/JIT
![Page 31: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/31.jpg)
31
6.3 Synchronization Optimization Lock coarsening :: Adjacent synchronized
blocks may be merged into one synchronized block
public static String concatToBuffer(StringBuffer sb, String s1, String s2, String s3) {
sb.append(s1);
sb.append(s2);
sb.append(s3);
return sb.toString();}
![Page 32: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/32.jpg)
32
6.4 Synchronization Optimization
Thread Suspending vs Thread Spinning In 1.4.2, spin for (default value of) 10 iterations
before being suspended Adaptive Spinning
Introduced in 1.6 Spin duration based on the previous spin attempts
and state of the lock owner
![Page 33: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/33.jpg)
33
7.1 Latches Latches allows one or more threads to wait
until a set of operations being performed in other threads completes.
When N concurrent sub-tasks occur, the coordinating thread will wait until each sub-task is executed
![Page 34: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/34.jpg)
34
class TestLatch {
final CountDownLatch latch = new CountDownLatch(3);
class myThread extends Thread {
public void run() { task.run();
latch.countDown()}}
public static void main (String[] args){
TestLatch tst = new TestLatch();
tst.new myThread().start();
tst.new myThread().start();
tst.new myThread().start();
latch.await();//Thread execution completed}}
7.1 Latches
![Page 35: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/35.jpg)
35
7.2 Barriers
Barrier allows a set of threads to wait for each other at a common barrier point.
When Barrier point occurs all the threads waiting on it are released and run() method of Barrier object is called.
class TestBarrier {
final static int no_of_engines = 4;
Runnable task = new Runnable() {
public void run() { flyplane() }}
![Page 36: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/36.jpg)
36
7.2 Barriers
final CyclicBarrier barrier = new CyclicBarrier(no_of_engines,task);
class Worker implements Runnable {
public void run() {
startEngine();
barrier.await();} }
public static void main(String[] args) {
TestBarrier flight = new TestBarrier ();
for (int i = 0; i < no_of_engines; ++i)
new Thread(flight.new Worker(i)).start(); }}
![Page 37: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/37.jpg)
37
References
https://www6.software.ibm.com/developerworks/education/j-concur/index.html
http://www.infoq.com/articles/java-threading-optimizations-p1
http://www.infoq.com/presentations/goetz-concurrency-past-present
![Page 38: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/38.jpg)
38
Q&A
![Page 39: Concurrency: Best Practices - IndicThreads.com …j09.indicthreads.com/wp-content/uploads/2009/12/... · Concurrency: Best Practices Pramod B Nagaraja IBM India Pvt LTD. 2 Agenda](https://reader031.vdocuments.site/reader031/viewer/2022030504/5ab098017f8b9a1d168b8591/html5/thumbnails/39.jpg)
39
Thank You !!!!