General Concurrency
Download
Report
Transcript General Concurrency
Concurrency in Java
Last Updated: Fall 2010
Paul Ammann SWE 619
Agenda
Some General Concurrency Mechanisms
Concurrency in Java
Synchronization in Java
Rules for Threads
Concurrency in Java
Concepts to be covered
Threads, concurrency
Interleaving, race conditions
Atomicity of execution
Mutual exclusion
Thread states
Synchronization, locks
Inter-thread communication
Concurrency in Java
Some General Concurrency
Mechanisms
Rendevous (Ada)
In practice: Web Servers
Single server, scores of clients! Waiting time?
Threads
Obviates need for certain low level primitives
Subject of today’s talk
Database mechanisms
Concurrency entirely hidden from user
ACID properties
Concurrency in Java
Interleaving
c.inc();
// c is a counter
c.inc();
System.out.println(c.get());
Suppose 2 threads are created
Each executes the 3 statements
Order in which they are executed?
Does thread 1 get to execute all 3 before thread 2?
Concurrency in Java
Atomicity of execution
What is the smallest unit of execution that
cannot be interleaved?
Can we ensure atomicity across multiple
statements?
// broken because of interleaving
private static int nextSerialNumber = 0; // in short nSN
public static int generateSerialNumber(){
return nextSerialNumber++; } // nSN = nSN + 1
Concurrency in Java
Atomic read and write
Thread 1 reads nSN = 4
Thread 2 reads nSN = 4 //should read 5
Thread 3 reads nSN = 4 //should read 6
Thread 1 writes nSN = 5
Thread 2 writes nSN = 5 //should write 6
Time
Thread 4 reads nSN = 5 //should read 7
Concurrency in Java
Concurrency in Java
Various mechanisms to obtain a Thread
Extend the Thread class
class T extends Thread {
… public void run() {…}
}
Thread t = new T();
t.start(); // start() calls run()
Implement the Runnable (or Callable) interface
Use an ExecutorService
Examples: Counter1.java, Counter2.java,
Counter3.java, Counter4.java
Concurrency in Java
Thread states
Initial – prior to start()
Runnable – started, but not necessarily
running (may be preempted)
Blocked – waiting for some event to occur
Stop – the run() method has returned
(avoid other ways of entering Stop state)
The join() method waits for a thread to stop
Or ExecutorService shutdown(), get()
Concurrency in Java
methods
Synchronization in Java
Threads use a “lock” model
Lock is associated with an object
“this” for synchronized methods
Specified object for synchronized block
Security/Reliability implications for public locks
Only one thread at a time may hold the lock
Examples
Wacky.java, Wacky1.java
BoundedQueue.java
SyncBoundedQueue.java
Concurrency in Java
Java Synchronization
Every Java object has an associated lock
“synchronized” makes a method lockable
A thread that locked a lock is said to be
holding the lock
When a thread unlocks a lock, the thread
is said to release the lock
Synchronization: mutual exclusion and
signal-wait
Concurrency in Java
Communication among
Threads
wait() – enter blocked state and release
the lock
notify() – wake up some (other) blocked
thread
notifyAll() – wake up all the (other)
blocked threads.
This is harder than it looks!
Example: BoundedQueueWithGuards.java
Concurrency in Java
What can go Wrong?
Deadlock – no progress possible
Starvation – no access to a resource
Simultaneous access to shared resources
– unpredictable behavior
Various tools to analyze these issues
Concurrency in Java