大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java多線程開發視頻教程

Java多線程開發視頻教程

更新時間:2020-03-19 09:45:36 來源:動力節點 瀏覽2761次


  目前接觸的多線程編程基本上都是基于java.util.concurrent這個包下的開發的,下面就以這個包來分析Java的多線程與高并發


Java多線程開發視頻教程


  一、分析面試題


  1.在java中wait和sleep方法的不同?


  最大的不同是在等待時wait會釋放鎖,而sleep一直持有鎖。Wait通常被用于線程間交互,sleep通常被用于暫停執行。


  2.創建多線程的三種方法


  (1)繼承Thread()


  (2)實現Runnable()接口


  (3)實現Callable接口


  3.繼承Thread與實現Runnable區別


  類可能只要求可執行即可,因此繼承整個Thread類的開銷過大


  4.Runnable和Callable的區別


  Runnable接口中的run()方法的返回值是void;而Callable接口中的call()方法是有返回值的,和Future/FutureTask配合可以用來獲取異步執行的結果。


  5.notify作用


  (1)notify:喚醒一個正在wait當前對象鎖的線程,并讓它拿到對象鎖


  (2)notifyAll:喚醒所有正在wait前對象鎖的線程


  (3)在調用wait,notify,notifyall的時候當前線程必須獲得這個對象的鎖。


  6.線程的5種狀態


Java多線程開發視頻教程


  7.你有哪些多線程開發良好的實踐


  (1)考慮使用線程池


  (2)優先使用volatile保證可見性


  (3)最小化同步范圍


  (4)給線程命名


  二、說說java5以后提供多線程的東西:


  ExecutorServicecachedThreadPool=Executors.線程池方法


  1.Java通過Executors提供四種線程池:


  newCachedThreadPool創建一個可緩存線程池,需要就增加,不需要就減少。


  newFixedThreadPool創建一個定長線程池,可控制線程最大并發數,超出的線程會在隊列中等待。


  newSingleThreadExecutor創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO,LIFO,優先級)執行。


  newScheduledThreadPool創建一個定長線程池,支持定時及周期性任務執行。(這個一般不用:一般框架就會有定時器)


  2.同步工具


  Semaphone(信號量)可以將任何一種容器變為有界阻塞容器:比如服務器登錄人數過多排隊等待。


  CyclicBarrier(循環屏障)他可以做出讓幾個線程都執行到某個地方之后,才讓幾個線程同時繼續執行。


  CountDownLatch(倒計時鎖)這個類能夠使一個線程等待其他線程完成各自的工作后再執行。


  ReentrantLock(重入鎖)把鎖機制分為讀鎖、寫鎖;讓鎖更靈活


  Condition用于讓指定線程等待與喚醒,按預期順序執行,他必須和ReentrantLock重入鎖配合使用。


  Callable配合Future/FutureTask獲取線程信息。


  3.原子對象


  AtomicInteger、AtomicLong、AtomicBoolean(Atomic則通過CAS(樂觀鎖)實現自動同步)


  主要是i++不是原子操作,非線程安全的,多線程訪問的時候需要用到synchronized關鍵字保持線程同步。synchronized是悲觀鎖,在多線程競爭下,加鎖、釋放鎖會導致比較多的上下文切換和調度延時,代價就是效率低下


  4.并發容器


  CopyOnWriteArrayList(寫復制列表)


  CopyOnWriteArraySet(寫復制集合)


  底層實現主要是操作時復制了一份出來,底層采用的是重入鎖解決并發更改問題。


  ConcurrentHashMap(分段鎖映射)


  hashtable鎖住的是一整張hash表而ConcurrentHashMap底層默認分段分成16份分別鎖住,利用樂觀鎖來操作效率問題。


  ConcurrentSkipListMap、ConcurrentSkipListSet、ConcurrentLinkedQueue、這三個都是有序的支持并發的。


  具體可以看Jdk文檔


  三、分布式鎖的實現方案


  1.tair


  incr和decr操作,相當于是樂觀鎖


  2.Redis/memcache


  setNx命令


  3.Zookeeper


  充分利用watcher機制,創建臨時結點,誰創建成功,誰就獲得當前的鎖


  4.數據庫:利用數據庫的行鎖


  //加鎖SQL


  updatetrade_basesetstatus=1wheretrade_no=“XXX”andstatus=0;


  //解鎖SQL


  updatetrade_basesetstatus=0wheretrade_no=“XXX”andstatus=1;


  注意trade_base表上一要有trade_no的列的唯一索引


  當然具體用那種分布鎖,還需要結合業務自身的需要,一般來說,在并發量不是別大,數據庫完全可以扛得住的情況下,用數據庫實現分布鎖最快,最方便,而且性能的損失也非常地小;


  當然現在很多場景下,都是分庫分表,并且加鎖和解鎖分別都只影響一行,對數據庫來說,加鎖和解鎖的sql也是非常輕量的sql操作,因此在性能損失上不用過多的擔心。


Java多線程開發視頻教程


    以上就是動力節點Java培訓機構小編介紹的“Java多線程開發視頻教程”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产欧美成人 | 日日噜噜夜夜狠狠tv视频免费 | 欧美亚洲一区二区三区 | 3d动漫精品成人一区二区三 | 何以笙箫默在线观看 | 日本在线看片网站 | 亚欧成人毛片一区二区三区四区 | 国产小视频在线观看 | 欧美18videosex灌满 | 亚洲国产中文字幕在线观看 | 日韩午夜免费视频 | 杨幂国产精品福利在线观看 | 在线国产区 | 26uuu另类欧美亚洲曰本 | 久久久久琪琪免费影院 | 亚洲最新视频在线观看 | 狠狠狠色丁香婷婷综合久久88 | 国产精品视频免费看 | 在线播放精品视频 | 欧美成人午夜在线全部免费 | 中国女人69xxxxx | 成人小视频在线观看 | 精品96在线观看影院 | 在线日本韩国 | 色狠狠一区二区三区香蕉蜜桃 | 久久久亚洲国产精品主播 | 99re久久在热线播放最新地址 | 亚洲欧美中日韩 | 久久996国产精品免费 | 亚洲久久久| 国内精品久久久久香蕉 | 手机在线看片不卡中文字幕 | 欧美亚洲另类综合 | 久青草香蕉精品视频在线 | 青青草免费视频在线播放 | 亚洲最新在线视频 | 国产成人精品一区二三区在线观看 | 看欧美毛片一级毛片 | 成人一区二区免费中文字幕 | 国产成人精品免费视频网页大全 | 久久在线 |