1. 程式人生 > >執行緒、執行緒池、引用及volatile與synchronized的區別

執行緒、執行緒池、引用及volatile與synchronized的區別

執行緒池 corePoolSize 當前執行緒數=corePoolSize 阻塞,阻塞佇列滿時建立新執行緒,直至macPoolSize,再來任務時,執行reject()。

初始化執行緒池 newFixedThreadPool() 初始化指定大小,即使沒有可執行任務也不會釋放執行緒。阻塞佇列:LinkedBlockingQueue newCachedThreadPool() 初始化可以快取的執行緒池,預設快取60s。沒有任務執行時執行緒的空閒時間超過keepAliveTime會自動釋放執行緒資源,提交新任務時若沒有空閒執行緒則建立新執行緒,要控制併發任務數,防止降低效能。阻塞佇列:SynchronousQueue newSingleThreadExecutor() 初始化只有一個執行緒的執行緒池。阻塞佇列:LinkedBlockingQueue newScheduledThreadPool() 初始化的執行緒池在指定時間週期性提交任務。可用來定期同步資料。 ExecutorService service = new newCachedThreadPool();

volatile與synchronized的區別 1.volatitle不能保證原子性 synchronized可以 2.volatitle是輕量級,修飾變數,可以保證資料可見性,synchronized重量級,可以保證原子性,可以修飾方法和程式碼塊。 3.volatitle不可以用來同步,不會阻塞。 synchronized=可見性+原子性=執行緒安全性

強引用 Object object = new Object(); 軟引用 記憶體不夠時回收 Object object = new Object(); SoftReference sf = new SoftReference(object); obj = null; 弱引用 WeakReference we = new WeakReference(object); 虛引用 PhantomReference pf = new PhantomReference(object);