并发编程交流
bluedavy
2010-03-19
About PPT
对于Java体系而言主要还是借助多线程来做并发
so下面的一切都是多线程相关点,不涉及多进程
资源竞争和一致性
Sun JDK提供的支持
并发包值得学习的地方
尽可能Nonblocking--例子
线程
线程交互
线程池
线程跟踪和问题查找
线程调度
Some tips
资源竞争和一致性
Sun JDK提供的支持
Synchronized
Semaphore、 CountdownLatch
ReentrantLock、Condition
AtomicInteger、ConcurrentHashMap、ArrayBlockingQueue
资源竞争和一致性
并发包值得学习的地方
AtomicInteger系列
CAS
ConcurrentHashMap
拆分锁
Semaphore、CountdownLatch
并发包中最强悍的类:AbstractQueuedSynchronizer
基于队列来做等待
看的也不是非常明白,需要懂的人分享下
尽可能Nonblocking例子
常见代码如下
private static Map<String,Connection> connections=new HashMap<String,Connection>();
public Connection get(String key) throws Exception{
synchronized(connections){
if((key)){
return (key);
}
Connection conn=createConnection(key);
(key,conn);
return conn;
}
}
尽可能Nonblocking例子
改造想法
connections改为ConcurrentHashMap
借助putIfAbsent来减少判断是否存在的lock
private static ConcurrentHashMap<String,Connection> connections=new ConcurrentHashMap<String,Connection>();
public Connection get(String key) throws Exception{
if((key)){
return (key);
}
Connection conn=createConnection(key);
Connection realConn=(key,conn);
if(realConn!=null){
();
}
return realConn;
}
尽可能Nonblocking例子
改造想法
能否不创建无谓的连接,想到了FutureTask
private static ConcurrentHashMap<String,FutureTask<Connection>> connections=new ConcurrentHashMap<String,FutureTask<Connection>>();
public Connection get(final String key) throws Exception{
if((key)){
return (key).get;
}
FutureTask<Connection> newTask=new FutureTask<Connection>(new Callable<Connection>(){
public Connection call() throws Exception{
return createConnection(key);
}
});
FutureTask<Connection> task=(key, newTask);
if(task==null){
();
return ();
}
return ();
}
线程
java 并发编程 来自淘豆网m.daumloan.com转载请标明出处.