mangreen / Some-Note

Development Memo
1 stars 0 forks source link

Java #27

Open mangreen opened 2 years ago

mangreen commented 2 years ago

Spring 生命週期

image

Spring Boot @Bean 生命週期

  1. https://cncsl.github.io/2021/0303/Spring-bean-%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/
  2. https://blog.csdn.net/dear_little_bear/article/details/109206754
mangreen commented 2 years ago

Tread vs Runable vs Callable

Runable vs Callable

https://dotblogs.com.tw/grayyin/2016/07/04/113501

Runnable和Callable的區別是:

  1. Callable規定的方法是call(),Runnable規定的方法是run().
  2. Callable在執行後可返回值,而Runnable在執行後不能返回值
  3. call() 方法可以拋出異常,run() 方法不可以
  4. 執行Callable會返回Future物件,表示非同步計算的結果。它提供了檢查計算是否完成的方法,以等待計算的完成,並檢索計算的結果。通過Future物件可以瞭解執行情況,可取消執行,還可獲取執行結果。

Tread vs Runable

https://www.jianshu.com/p/9c9a11092f26

  1. Runnable更容易实现资源共享,能多个线程同时处理一个资源。

Tread Pool = Queue & Worker

https://popcornylu.gitbooks.io/java_multithread/content/threadpool/threadpool.html

Tread Pool

https://www.cnblogs.com/zhujiabin/p/5404771.html Java通過Executors提供四種線程池,分別為:

  1. newCachedThreadPool創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閒線程,若無可回收,則新建線程。
  2. newFixedThreadPool 創建一個定長線程池,可控制線程最大並發數,超出的線程會在隊列中等待。
  3. newScheduledThreadPool 創建一個定長線程池,支持定時及週期性任務執行。
  4. newSingleThreadExecutor 創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行。
mangreen commented 2 years ago

synchronized vs Lock, and Condition

https://www.796t.com/content/1550023214.html

synchronized

synchronize的限制

synchronized是不錯,但它並不完美。它有一些功能性的限制:

  1. 它無法中斷一個正在等候獲得鎖的執行緒;
  2. 也無法通過投票得到鎖,如果不想等下去,也就沒法得到鎖;
  3. 同步還要求鎖的釋放只能在與獲得鎖所在的堆疊幀相同的堆疊幀中進行,多數情況下,這沒問題(而且與異常處理互動得很好),但是,確實存在一些非塊結構的鎖定更合適的情況。

ReentrantLock

  1. ReentrantLock 類實現了Lock ,它擁有與synchronized 相同的併發性和記憶體語義,但是添加了類似鎖投票、定時鎖等候和可中斷鎖等候的一些特性。
  2. 此外,它還提供了在激烈爭用情況下更佳的效能。(換句話說,當許多執行緒都想訪問共享資源時,JVM 可以花更少的時候來排程執行緒,把更多時間用在執行執行緒上。)

ReentrantReadWriteLock

執行緒間通訊Condition