線程
MonitorFilter 獲得?monitor? reference
獲得 reference 是個耗時操作,? ?MonitorCreator 是?Callable ,F(xiàn)utureTask 需要 get() 獲取結(jié)果萌业,dubbo 是通過添加callback 來實現(xiàn)的霞赫,這樣不用阻塞當前線程锄贷,實現(xiàn)類是?listenableFutureTask ,通過名字可以看出來番电,添加了Listener來獲得結(jié)果乍恐,需要關(guān)注2個地方
1.?
覆蓋了?FutureTask 的 done() 方法
done表明線程已完成
2.
另外一個是 ExecutionList ,以后在分析母剥,在獲取 monitor reference 對象場景下滞诺,我覺得有點復雜。
ListenableFutureTask 和 guava 的實現(xiàn)一樣?
ForkingClusterInvoker 發(fā)起多個請求环疼,只有一個成功即返回
關(guān)鍵 : ref.poll(timeout, TimeUnit.MILLISECONDS);??
只取第一個結(jié)果习霹,并且控制超時§帕ィ可以通過 forks 參數(shù)控制向多少個機器發(fā)起請求, timeout 參數(shù)控制超時時間淋叶。
鎖
ReentrantLock 可重入鎖
使用重入鎖進行加鎖是一種顯式操作,通過何時加鎖與釋放鎖使重入鎖對邏輯控制的靈活性遠遠大于synchronized關(guān)鍵字伪阶。
com.alibaba.dubbo.container.Main 中煞檩,有ReentrantLock 配合 Condition 使用。
1. Runtime.addShutdownHook(Thread hook)方法栅贴,可以注冊一個JVM關(guān)閉的鉤子斟湃,這個鉤子可以在以下幾種場景被調(diào)用
????????1. 程序正常退出
????????2. 使用System.exit()
????????3. 終端使用Ctrl+C觸發(fā)的中斷
????????4. 系統(tǒng)關(guān)閉
????????5. 使用Kill pid命令干掉進程
2. Main 主線程, STOP.await(); 等待退出通知
應用程序無法保證shutdownHook總是運行的 (VM crash、kill -9檐薯、Runime.halt()凝赛,shutdownHook都無法運行 )
可以有多個shutdownHook,但其執(zhí)行順序無法保證
----------
Lock的await/singal 和 Object的wait/notify 的區(qū)別坛缕、比較
https://blog.csdn.net/zhang199416/article/details/70771238
https://www.cnblogs.com/alphablox/archive/2013/01/20/2868479.html
http://www.cnblogs.com/csuwater/p/5411693.html