concurrencyproblem
TRANSCRIPT
Concurrency ProblemAdriano Patrick Cunha - UDCE
quarta-feira, 10 de outubro de 2012
Evolution of processors
quarta-feira, 10 de outubro de 2012
Big Data to process
quarta-feira, 10 de outubro de 2012
What Possibilities ?
quarta-feira, 10 de outubro de 2012
Concurrence?
quarta-feira, 10 de outubro de 2012
Which options ?
quarta-feira, 10 de outubro de 2012
Functional Programming language ?
quarta-feira, 10 de outubro de 2012
5
API java.util.concurrent
quarta-feira, 10 de outubro de 2012
Thead-Safe
quarta-feira, 10 de outubro de 2012
Thead-Safe
private Set<String> ipAddressSet = new HashSet<String>();
quarta-feira, 10 de outubro de 2012
Thead-Safe
private Set<String> ipAddressSet = new HashSet<String>(); private Set<String> ipAddressSet = Collections.
synchonizedSet(new HashSet<String>());
quarta-feira, 10 de outubro de 2012
Thead-Safe
private Set<String> ipAddressSet = new HashSet<String>(); private Set<String> ipAddressSet = Collections.
synchonizedSet(new HashSet<String>());
private BlockingQueue<String> ipAddress=new LinkedBlockingQueue<String>();
quarta-feira, 10 de outubro de 2012
Thead-Safe
private Set<String> ipAddressSet = new HashSet<String>(); private Set<String> ipAddressSet = Collections.
synchonizedSet(new HashSet<String>());
private BlockingQueue<String> ipAddress=new LinkedBlockingQueue<String>();
fast-fail iterators
weakly consistent iterators
quarta-feira, 10 de outubro de 2012
Thead-Safe
ConcurrentHashMap, CopyOnWriteArrayList e CopyOnWriteArraySet
Outras Coleções
quarta-feira, 10 de outubro de 2012
Executor
Executor
ExecutorServiceScheduledExecutorService
quarta-feira, 10 de outubro de 2012
Executor
(new Thread(r)).start();
quarta-feira, 10 de outubro de 2012
Executor
(new Thread(r)).start();e.execute(r);
quarta-feira, 10 de outubro de 2012
Thread Pools
Executors.newCachedThreadPool();
Executors.newFixedThreadPoll(n);
Executors.newSingleThreadExecutor();
quarta-feira, 10 de outubro de 2012
class Counter { private int c = 0;
public void increment() { c++; }
public void decrement() { c--; }
public int value() { return c; }
}
1. Retrieve the current value of c.2. Increment the retrieved value by 1.3. Store the incremented value back in c.
1. Thread A: Retrieve c.2. Thread B: Retrieve c.3. Thread A: Increment retrieved value; result is 1.4. Thread B: Decrement retrieved value; result is -1.5. Thread A: Store result in c; c is now 1.6. Thread B: Store result in c; c is now -1.
Thread Pools
quarta-feira, 10 de outubro de 2012
class SynchronizedCounter { private int c = 0;
public synchronized void increment() { c++; }
public synchronized void decrement() { c--; }
public synchronized int value() { return c; }
}
Thread Pools
quarta-feira, 10 de outubro de 2012
Thread Pools
import java.util.concurrent.atomic.AtomicInteger;
class AtomicCounter { private AtomicInteger c = new AtomicInteger(0);
public void increment() { c.incrementAndGet(); }
public void decrement() { c.decrementAndGet(); }
public int value() { return c.get(); }
}
quarta-feira, 10 de outubro de 2012
Bibliografia
Livros
Concurrent Programming in Java, Design Principles and Patterns, Doug Lea, Addison-Wesley, 1999
Java Concurrency In Practice, Brian Goetz, Addison-Wesley, 2006
Links
http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html
http://www.jcp.org/en/jsr/detail?id=166
http://gee.cs.oswego.edu/dl/concurrency-interest/
http://www.devmedia.com.br/websys.2/webreader.asp?cat=6&revista=javamagazine_69
quarta-feira, 10 de outubro de 2012