『壹』 什麼是多線程,多線程編程的好處是什麼
舉個例子,你要做飯,你要做的飯是米飯和一個炒菜。
如果是單線程,那麼你可以如下做:
第一種方法:先炒菜,然後開始蒸米飯;
第二種方法:先蒸米飯,等米飯熟了再炒菜;
如果是多線程,那麼你就可以如下做:
先蒸米飯,在蒸米飯的過程中去炒菜。
有些問題的解決用多線程會提高效率,比如上邊的例子。但是有時不會提高效率,反而會影響效率:
比如,你要洗衣服,還打算做家庭作業(假設你是小學生,老師給你布置的家庭作業)。
如果是單線程:你要麼洗完衣服做作業,要麼做完作業洗衣服。
如果是多線程:你洗一分鍾衣服做一分鍾作業,交叉進行,顯然有些時間都耗在了任務的切換上了。
所以,多線程主要用於,當一個任務需要不佔用資源的等待的時候,可以使用空閑的資源
『貳』 《java多線程編程核心技術》和《java並發編程的藝術》兩本書的異同
區別很大:
《java多線程編程核心技術》:
這本書讓你入個門,整體上了介紹一些並發編程的基本API、常見場景和一些坑,推薦先看這本書,比較簡單,適合新手,但是原理不夠深入
和《java並發編程的藝術》
這本書從底層和實現原理開始講起,深入java內存模型和處理器的知識講解並發編程的實現原理,適合有一定基礎的人看
『叄』 多線程編程需要注意的幾點
1、不要在子線程操作UI控制項
2、如果你操作了,也絕對不能調用UpdateData來更新界面,否則程序Crash
3、這一條建立在第一條基礎上---你在子線程操作UI控制項,不可以讓主線程等待某些條件(如等待子線程關閉,而子線程正在操作UI、等待進
入臨界區,而子線程已經進入,並且操作UI),否則會出現假死...
4、最好方案:子線程操作數據,完成之後,通知主線程進行更新....
『肆』 有什麼多線程編程的書推薦
Java並發編程實戰 (豆瓣) (java並發的聖經)
多處理器編程的藝術 (豆瓣) (並發編程的各種演算法,java實現,有點難度)
並發的藝術 (豆瓣) (多核處理器的共享內存模型中的各種演算法)
Java虛擬機並發編程 (豆瓣) (jvm平台上各種語言的並發比較,如java,scala,clojure)
Java並發編程的藝術 (阿里專家方騰飛寫的一本書)
Java 7並發編程實戰手冊 (豆瓣) (java中的並發編程實踐,屬於API工具書,指南)
Java多線程編程實戰指南(設計模式篇) (豆瓣)
Java多線程編程核心技術 (豆瓣)
Java並發編程:核心方法與框架
實戰Java高並發程序設計
七周七並發模型 (豆瓣) (七種並發模型的比較)
Go並發編程實戰 (豆瓣)
C#並發編程經典實例 (豆瓣)
C#多線程編程實戰 (豆瓣)
『伍』 多線程編程
HANDLE hThrd[3];
hThrd[0]= CreateThread();
hThrd[1]= CreateThread();
hThrd[2]= CreateThread();
WaitForMultiObjectex(hThrd,ture)即可。
具體參數你參看一下msdn就可以,挺簡單的。
『陸』 做過多線程編程的請拿分!!!!
一樓的朋友還是沒講到要害上,樓主看過MSDN了,這點東西不可能不知道。
關於這個問題,我只談談我的看法:開始學習多線程的時候,我也有過很多問題和不解,不過隨著實踐的增加,也慢慢清晰了概念。
--------------------------------------------
線程是可執行的代碼段,這點樓主一定認同。
而進程則只是一個環境而以,進程是不可以執行的,它只是為各各線程提供所需的資源共享。進程的產生必然會產生至少一個線程(至少會有一個主線程)。永遠不會出現一個線程也沒有的進程出現的情況。如果明確了這點,那麼這個問題就很好理解了。
如果樓主用過CreateProcess的話就應該知道,它的第一個參數是一個可執行文件的全路徑。而這個可執行文件被載入入內存後,CPU執行的第一條指令就是這個進程的主線程的入口點。其實佔在C語言的角度來講,就是main函數罷了。以後再調用CreateThread都是在main函數中調用的。如果沒有main函數,你的程序根本不可能運行。
所以,多線程程序中的主線程是一個進程存在的必然條件,只要你寫程序,就一定會有main函數,有了這個main函數,就有了主線程,所以主線程不需要回調地址(因為main是必然唯一存在的)。
-----------------------------
我又發留言給你了,你收到沒有。收到了留言給我!
『柒』 《Java並發編程的藝術》epub下載在線閱讀,求百度網盤雲資源
《Java並發編程的藝術》(方騰飛)電子書網盤下載免費在線閱讀
資源鏈接:
鏈接:
書名:Java並發編程的藝術
作者:方騰飛
豆瓣評分:7.4
出版社:機械工業出版社
出版年份:2015-7-1
頁數:240
內容簡介:
並發編程領域的扛鼎之作,作者是阿里和1號店的資深Java技術專家,對並發編程有非常深入的研究,《Java並發編程的藝術》是他們多年一線開發經驗的結晶。本書的部分內容在出版早期發表在Java並發編程網和InfoQ等技術社區,得到了非常高的評價。它選取了Java並發編程中最核心的技術進行講解,從JDK源碼、JVM、CPU等多角度全面剖析和講解了Java並發編程的框架、工具、原理和方法,對Java並發編程進行了最為深入和透徹的闡述。
《Java並發編程的藝術》內容涵蓋Java並發編程機制的底層實現原理、Java內存模型、Java並發編程基礎、Java中的鎖、並發容器和框架、原子類、並發工具類、線程池、Executor框架等主題,每個主題都做了深入的講解,同時通過實例介紹了如何應用這些技術。
作者簡介:
方騰飛(花名清英,英文名kiral),
螞蟻金服集團技術專家,從事Java開發近10年。5年以上的團隊管理、項目管理和敏捷開發經驗,崇尚團隊合作。曾參與CMS、電子海圖、SOC、ITIL、電子商務網站和信貸管理系統等項目。目前在螞蟻金服網商銀行貸款管理團隊負責數據採集平台開發工作。與同事合作開發了tala code Review插件,深受阿里數千名工程師擁躉,並開發過開源工具jdbcutil(https://github.com/kiral/utils)。創辦了並發編程網,組織翻譯了百餘篇國外優秀技術文章,並曾為InfoQ撰寫「聊聊並發」專欄,在《程序員》雜志撰寫敏捷實踐系列文章
魏鵬,
阿里巴巴集團技術專家,在阿里巴巴中國網站技術部工作多年,曾擔任中國網站交易平台架構師,主導了交易系統服務化工作,設計實現的數據遷移系統高效地完成了阿里巴巴中國網站交易數據到阿里巴巴集團的遷移工作。目前在阿里巴巴共享業務事業部從事Java應用容器Pandora和服務框架HSF的相關工作,其中Java應用容器Pandora是阿里巴巴中間件運行的基礎,而服務框架HSF則是阿里巴巴集團實現服務化的主要解決方案,二者在阿里巴巴擁有最為廣泛的使用量。個人平時喜歡閱讀技術書籍,翻譯一些國外優秀文檔,喜歡總結、樂於分享,對Java應用容器、多線程編程以及分布式系統感興趣。
程曉明,
1號店資深架構師,從事1號店交易平台系統的開發,技術上關注並發與NIO。因5年前遇到的一個線上故障,解決過程中對Java並發編程產生了濃厚的興趣,從此開始了漫長的探索之旅:從底層實現機制、內存模型到Java同步。縱觀我自己對Java並發的學習過程,是一個從高層到底層再到高層的一個反復迭代的過程,我估計很多讀者的學習過程應該與我類似。文章多見諸《IBM developerWorks》、InfoQ和《程序員》雜志。
『捌』 什麼是多線程編程
多線程編程技術是Java語言的重要特點。多線程編程的含義是將程序任務分成幾個並行的子任務。特別是在網路編程中,你會發現很多功能是可以並發執行的。 比如網路傳輸速度較慢、用戶輸入速度較慢,你可以用兩個獨立的線程去完成這兩個功能,而不影響正常的顯示或其它功能。 多線程是與單線程比較而言的,普通的Windows採用單線程程序結構,其工作原理是:主程序有一個消息循環,不斷從消息隊列中讀入消息來決定下一步所要乾的事情,一般是針對一個函數,只有等這個函數執行完之後,主程序才能接收另外的消息來執行。比如子函數功能是在讀一個網路數據,或讀一個文件,只有等讀完這個數據或文件才能接收下一個消息。在執行這個子函數過程中你什麼也不能幹。但往往讀網路數據和等待用戶輸入有很多時間處於等待狀態,多線程利用這個特點將任務分成多個並發任務後,就可以解決這個問題。Java中的線程類 1.擴展java.lang.Thread類,用它覆蓋Thread類的run方法。 2.生成實現java.lang.Runnable介面的類並將其它的實例與java.lang.Thread實例相關聯。 Thread類是負責向其它類提供線程支持的最主要的類,要使用一個類具有線程功能,在Java中只要簡單地從Thread類派生一個子類就可以了擴展Thread類,如printThread.java。 Thread類最重要的方法是run方法。run方法是新線程執行的方法,因此生成java.lang.Thread的子類時,必須有相應的run方法。 //PrintThread.java public class PrintThread extends Thread//繼承Tread類 private int count=0 //定義一個count變數用於統計列印的次數並共享變數 public static void mainString args//main方法開始 PrintThread p=new PrintThread//創建一個線程實例 p.start//執行線程 for{;;}//主線程main方法執行一個循環,for執行一個死循環count++ System.out.printcount+″:Main\n″//主線程中列印count +「main」變數的值,並換行 public void run//線程類必須有的run()方法for{;;}count++ System.out.printcount+″:Thread\n″ 上面這段程序便是繼承java.lang.Tread並覆蓋run的方法。用Java 虛擬機啟動程序時,這個程序會先生成一個線程並調用程序主類的main方法。這個程序中的main方法生成新線程,連接列印「Thread」。在啟動線程之後,主線程繼續列印「Main」。 編譯並執行這個程序,然後立即按「Ctrl+C」鍵中斷程序,你會看到上面所述的兩個線程不斷列印出:XXX:main…..XXX:Thread…. XXX代表的是數字,也就是上面count的值。在筆者的機器上,不同時刻這兩個線程列印的次數不一樣,先列印20個main(也就是先執行20次主線程)再列印出50次Thread,然後再列印main…… 提示:為了便於查看該程序的執行結果,你可以將執行結果導入一個文本文件,然後打開這個文件查看各線程執行的情況。如運行: javac PrintThread.java Java PrintThread1.txt 第一個命令javac PrintThread.java是編譯java程序,第二個是執行該程序並將結果導入1.txt文件。當然你可以直接執行命令:java
『玖』 如何評價 c++多線程編程實戰 知乎
多線程編程的難點不在於鎖,正常人看一下操作系統再寫幾個線程demo就可以基本理解了。對於C++而言,甚至連編寫線程安全的類也不是難事。只需要用同步原語來保持對共享資源的訪問即可。我個人覺得最需要的就是實戰,寫Demo誰都會寫。同步原語就那麼幾個,信號量,互斥量,條件變數等。但是怎麼用呢?當你從點擊星際爭霸到和玩家匹配進行游戲,這當中程序是怎麼運行的?事件驅動是怎麼驅動的?就目前來說,我遇到的困難不是線程的死鎖,而是對並發模型的理解。Actor,Reactor模式等。這些東西不實戰,個人空想理解起來會吃力。
『拾』 多線程編程怎麼回事啊
每個正在系統上運行的程序都是一個進程。每個進程包含一到多個線程。進程也可能是整個程序或者是部分程序的動態執行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨立執行。也可以把它理解為代碼運行的上下文。所以線程基本上是輕量級的進程,它負責在單個程序里執行多任務。通常由操作系統負責多個線程的調度和執行。
什麼是多線程?
多線程是為了使得多個線程並行的工作以完成多項任務,以提高系統的效率。線程是在同一時間需要完成多項任務的時候被實現的。
使用線程的好處有以下幾點:
·使用線程可以把占據長時間的程序中的任務放到後台去處理
·用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度
·程序的運行速度可能加快
·在一些等待的任務實現上如用戶輸入、文件讀寫和網路收發數據等,線程就比較有用了。在這種情況下我們可以釋放一些珍貴的資源如內存佔用等等。
還有其他很多使用多線程的好處,這里就不一一說明了。
一些線程模型的背景
我們可以重點討論一下在Win32環境中常用的一些模型。
·單線程模型
在這種線程模型中,一個進程中只能有一個線程,剩下的進程必須等待當前的線程執行完。這種模型的缺點在於系統完成一個很小的任務都必須佔用很長的時間。
·塊線程模型(單線程多塊模型STA)
這種模型里,一個程序里可能會包含多個執行的線程。在這里,每個線程被分為進程里一個單獨的塊。每個進程可以含有多個塊,可以共享多個塊中的數據。程序規定了每個塊中線程的執行時間。所有的請求通過Windows消息隊列進行串列化,這樣保證了每個時刻只能訪問一個塊,因而只有一個單獨的進程可以在某一個時刻得到執行。這種模型比單線程模型的好處在於,可以響應同一時刻的多個用戶請求的任務而不只是單個用戶請求。但它的性能還不是很好,因為它使用了串列化的線程模型,任務是一個接一個得到執行的。
·多線程塊模型(自由線程塊模型)
多線程塊模型(MTA)在每個進程里只有一個塊而不是多個塊。這單個塊控制著多個線程而不是單個線程。這里不需要消息隊列,因為所有的線程都是相同的塊的一個部分,並且可以共享。這樣的程序比單線程模型和STA的執行速度都要塊,因為降低了系統的負載,因而可以優化來減少系統idle的時間。這些應用程序一般比較復雜,因為程序員必須提供線程同步以保證線程不會並發的請求相同的資源,因而導致競爭情況的發生。這里有必要提供一個鎖機制。但是這樣也許會導致系統死鎖的發生。