您好,登錄后才能下訂單哦!
這篇文章主要介紹“java中關于線程的問題有哪些”,在日常操作中,相信很多人在java中關于線程的問題有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java中關于線程的問題有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1),如何在兩個線程之間共享數據。
通過在線程之間共享對象就可以了,然后通過wait/notify/notifyAll, await/signal/signalAll 進行喚起和等待。比方說阻塞隊列 BlockingQueue 就是為線程之間共享數據設計的。
2),sleep方法和wait方法的區別。
sleep方法和wait方法都可以用來放棄CPU一定的時間。不同點在于如果線程持有某個對象的監視器,sleep方法不會放棄這個對象的監視器,wait方法會放棄這個對象的監視器。
3),生產者消費者模型的作用是什么。
(1),通過平衡生產者的生成能力和消費者的消費能力來提升整個系統的運行效率,這是生產者消費者模式最重要的作用。
(2),解耦,這是生產者消費者模型附帶的作用,解耦意味著生產者和消費者之間的聯系少,聯系越少越可以獨自發展而不需要收到相互的制約。
4), ThreadLocal有什么用 。
ThreadLocal就是一種以空間換時間的做法,在每個Thread里面維護了一個以地址法實現的 ThreadLocal.ThreadLocalMap ,把數據進行隔離,數據不共享,自然就沒有線程安全方面的問題了。
5), 為什么wait()方法和notify()/notifyAll()方法要在同步塊中被調用 。
這是JDK強制的,wait()方法和notify()/notifyAll()方法在調用前必須先獲得對象的鎖。
6), wait()方法和notify()/notifyAll()方法在放棄對象監視器時有什么區別 。
wait()方法和notify()/notifyAll()方法在放棄對象監控器的區別在于:wait()方法立即釋放對象監視器,notify()/notifyAll()方法則會等待線程剩余代碼執行完畢才會放棄對象監視器。
7), 為什么要使用線程池 。
避免頻繁地創建和銷毀線程。達到線程對象的重用。另外,使用線程池還可以根據項目靈活的控制并發的數目。
8), 怎么檢測一個線程是否持有對象監視器 。
Thread類提供了一個holdsLock(Object obj)方法,當且僅當對象obj的監視器被某條線程持有的時候才會返回true,注意這個一個static方法。
9), synchronized和ReentrantLock的區別 。
synchronized是和if、else、for、while一樣的關鍵字,ReentrantLock是類,這是二者的本質區別,既然ReentrantLock是類。它提供了比synchroinized更多更靈活的特性。
(1)ReentrantLock可以對獲取鎖的等待時間進行設置,這樣就避免了死鎖
(2)ReentrantLock可以獲取各種鎖的信息
(3)ReentrantLock可以靈活地實現多路通知
10), ConcurrentHashMap的并發度是什么 ?
ConcurrentHashMap的并發度就是segment的大小,默認為16,這意味著最多同時可以有16條線程操作ConcurrentHashMap ,這也是ConcurrentHashMap對Hashtable的最大優勢,
11), ReadWriteLock是什么 ?
ReentrantLock某些時候有局限。加鎖,降低了程序的性能。讀寫鎖ReadWriteLock。是一個讀寫鎖接口,讀寫分離,讀鎖共享,寫鎖獨占。
12), FutureTask是什么 ?
FutureTask表示一個異步運算的任務。FutureTask里面可以傳入一個Callable的具體實現類,可以對這個異步運算的任務的結果進行等待獲取、判斷是否已經完成、取消任務等操作。當然,由于FutureTask也是Runnable接口的實現類,所以FutureTask也可以放入線程池中。
13), Linux環境下如何查找哪個線程使用CPU最長
(1),獲取項目的pid, ps -ef|grep java
(2),top -H -p pid
分布式基礎理論-----------------------------------------------------------------------------
1,CAP
分布式領域CAP理論。
1),Consistency,一致性:數據一致性,所有數據變動都是同步的。
2),Availability(可用性),好的響應性能。
3),Partition tolerance:分區容忍性。
在分布式系統中,這三個要素最多只能實現兩點,不可能三者兼顧;對于分布式數據系統,分區容忍性是基本要求;對于大多數Web應用,犧牲一致性而換取高可用性,是目前多數分布式數據庫產品的方向。
2,Base
1),Basically Available;基本可用,支持分區失敗。
2),Soft state 軟狀態:狀態可以有一段時間不同步,異步。
3),Eventually consistent: 最終一致性,最終數據是一致的就可以了,而不是時時一致。
3,NoSQL運動兩個核心理論。
1),Google的BigTable
BigTable提出了一種數據模型,將各列數據進行排序存儲。數據值按范圍分布在多臺機器,數據更新操作有嚴格的一致性保證。
2),Dynamo使用的是另外一種分布式模型。Dynamo的模型更簡單,它將數據按key進行hash存儲。其數據分片模型有比較強的容災性,因此它實現的是相對松散的弱一致性:最終一致性。
JAVA I/O中的設計模式
1,適配器模式就是把一個類的接口變換成客戶端所能接受的另一個接口。從而使兩個接口不匹配而無法在一起工作的兩個類能夠在一起工作。通常被用在一個項目需要引用一些開源框架來一起工作時,這些框架的內部有一些關于環境信息的接口,需要從外部引用,但是外部的接口不一定能匹配,就需要適配器模式來轉換接口。
Java的I/O類庫中又許多這樣的需求,將字符串轉成字節數據保存在文件中,將字節數據變成數據流。具體來說,InputStreamReader和OutputStreamWriter就是適配器的體現。InputStreamReader實現了Reader接口,并且持有InputStream的引用,其作用是將inputStream適配到Reader。源角色就是inputStream代表的實例對象,目標角色就是Reader類。
2,裝飾器模式
作用是使得被裝飾者功能更強大,而且裝飾前后使用方式不變,Java I/O類庫中有許多不同功能的組合情況,這些不同的功能組合都是使用裝飾器模式實現的。
以FileInputStream為例;
由于 java I/O庫需要很多性能的各種組合,如果這些性能都是用繼承來實現,那么每一種組合都需要一個類,這樣就造成大量行重復的類出現。如果采用裝飾模式,那么類的數目就會大大減少,性能的重復也可以減至最少。因此裝飾者模式是java I/O庫基本模式。裝飾者的引進,造成靈活性和復雜性的提高。因此在使用java I/O庫時,
Socket 又稱 套接字 ,應用程序通過“套接字”向網絡發請求,一方掛起電話相當于關閉socket,撤銷連接。
一個完整的Socket有一個本地唯一的Socket號。由操作系統分配
Socket是面向客戶/服務器模型設計的。Socket利用客戶/服務器模式巧妙的解決進程之間建立通信連接問題。
套接字之間連接過程分為三個步驟:服務器監聽,客戶端請求,連接確認。
1),服務器監聽:服務器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態,實時監控網絡狀態。
2),客戶端請求:是指由客戶端的套接字提出連接請求,要連接的目標是服務端的套接字。
3),連接確認:是指當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求。它就響應客戶端套接字的請求,建立一個新的線程。
到此,關于“java中關于線程的問題有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。