當前位置:首頁 » 編程軟體 » java編程模型

java編程模型

發布時間: 2023-07-26 09:30:39

『壹』 「高並發」兩種非同步模型與深度解析Future介面-

大家好,我是冰河~~

本文有點長,但是滿滿的干貨,以實際案例的形式分析了兩種非同步模型,並從源碼角度深度解析Future介面和FutureTask類,希望大家踏下心來,打開你的IDE,跟著文章看源碼,相信你一定收獲不小!

java的並發編程中,大體上會分為兩種非同步編程模型,一類是直接以非同步的形式來並行運行其他的任務,不需要返回任務的結果數據。一類是以非同步的形式運行其他任務,需要返回結果。

1.無返回結果的非同步模型

無返回結果的非同步任務,可以直接將任務丟進線程或線程池中運行,此時,無法直接獲得任務的執行結果數據,一種方式是可以使用回調方法來獲取任務的運行結果。

具體的方案是:定義一個回調介面,並在介面中定義接收任務結果數據的方法,具體邏輯在回調介面的實現類中完成。將回調介面與任務參數一同放進線程或線程池中運行,任務運行後調用介面方法,執行回調介面實現類中的邏輯來處理結果數據。這里,給出一個簡單的示例供參考。

便於介面的通用型,這里為回調介面定義了泛型。

回調介面的實現類主要用來對任務的返回結果進行相應的業務處理,這里,為了方便演示,只是將結果數據返回。大家需要根據具體的業務場景來做相應的分析和處理。

任務的執行類是具體執行任務的類,實現Runnable介面,在此類中定義一個回調介面類型的成員變數和一個String類型的任務參數(模擬任務的參數),並在構造方法中注入回調介面和任務參數。在run方法中執行任務,任務完成後將任務的結果數據封裝成TaskResult對象,調用回調介面的方法將TaskResult對象傳遞到回調方法中。

到這里,整個大的框架算是完成了,接下來,就是測試看能否獲取到非同步任務的結果了。

在測試類中,使用Thread類創建一個新的線程,並啟動線程運行任務。運行程序最終的介面數據如下所示。

大家可以細細品味下這種獲取非同步結果的方式。這里,只是簡單的使用了Thread類來創建並啟動線程,也可以使用線程池的方式實現。大家可自行實現以線程池的方式通過回調介面獲取非同步結果。

2.有返回結果的非同步模型

盡管使用回調介面能夠獲取非同步任務的結果,但是這種方式使用起來略顯復雜。在JDK中提供了可以直接返回非同步結果的處理方案。最常用的就是使用Future介面或者其實現類FutureTask來接收任務的返回結果。

使用Future介面往往配合線程池來獲取非同步執行結果,如下所示。

運行結果如下所示。

FutureTask類既可以結合Thread類使用也可以結合線程池使用,接下來,就看下這兩種使用方式。

結合Thread類的使用示例如下所示。

運行結果如下所示。

結合線程池的使用示例如下。

運行結果如下所示。

可以看到使用Future介面或者FutureTask類來獲取非同步結果比使用回調介面獲取非同步結果簡單多了。注意:實現非同步的方式很多,這里只是用多線程舉例。

接下來,就深入分析下Future介面。

1.Future介面

Future是JDK1.5新增的非同步編程介面,其源代碼如下所示。

可以看到,在Future介面中,總共定義了5個抽象方法。接下來,就分別介紹下這5個方法的含義。

取消任務的執行,接收一個boolean類型的參數,成功取消任務,則返回true,否則返回false。當任務已經完成,已經結束或者因其他原因不能取消時,方法會返回false,表示任務取消失敗。當任務未啟動調用了此方法,並且結果返回true(取消成功),則當前任務不再運行。如果任務已經啟動,會根據當前傳遞的boolean類型的參數來決定是否中斷當前運行的線程來取消當前運行的任務。

判斷任務在完成之前是否被取消,如果在任務完成之前被取消,則返回true;否則,返回false。

這里需要注意一個細節:只有任務未啟動,或者在完成之前被取消,才會返回true,表示任務已經被成功取消。其他情況都會返回false。

判斷任務是否已經完成,如果任務正常結束、拋出異常退出、被取消,都會返回true,表示任務已經完成。

當任務完成時,直接返回任務的結果數據;當任務未完成時,等待任務完成並返回任務的結果數據。

當任務完成時,直接返回任務的結果數據;當任務未完成時,等待任務完成,並設置了超時等待時間。在超時時間內任務完成,則返回結果;否則,拋出TimeoutException異常。

2.RunnableFuture介面

Future介面有一個重要的子介面,那就是RunnableFuture介面,RunnableFuture介面不但繼承了Future介面,而且繼承了java.lang.Runnable介面,其源代碼如下所示。

這里,問一下,RunnableFuture介面中有幾個抽象方法?想好了再說!哈哈哈。。。

這個介面比較簡單run()方法就是運行任務時調用的方法。

3.FutureTask類

FutureTask類是RunnableFuture介面的一個非常重要的實現類,它實現了RunnableFuture介面、Future介面和Runnable介面的所有方法。FutureTask類的源代碼比較多,這個就不粘貼了,大家自行到java.util.concurrent下查看。

(1)FutureTask類中的變數與常量

在FutureTask類中首先定義了一個狀態變數state,這個變數使用了volatile關鍵字修飾,這里,大家只需要知道volatile關鍵字通過內存屏障和禁止重排序優化來實現線程安全,後續會單獨深度分析volatile關鍵字是如何保證線程安全的。緊接著,定義了幾個任務運行時的狀態常量,如下所示。

其中,代碼注釋中給出了幾個可能的狀態變更流程,如下所示。

接下來,定義了其他幾個成員變數,如下所示。

又看到我們所熟悉的Callable介面了,Callable介面那肯定就是用來調用call()方法執行具體任務了。

看一下WaitNode類的定義,如下所示。

可以看到,WaitNode類是FutureTask類的靜態內部類,類中定義了一個Thread成員變數和指向下一個WaitNode節點的引用。其中通過構造方法將thread變數設置為當前線程。

(2)構造方法

接下來,是FutureTask的兩個構造方法,比較簡單,如下所示。

(3)是否取消與完成方法

繼續向下看源碼,看到一個任務是否取消的方法,和一個任務是否完成的方法,如下所示。

這兩方法中,都是通過判斷任務的狀態來判定任務是否已取消和已完成的。為啥會這樣判斷呢?再次查看FutureTask類中定義的狀態常量發現,其常量的定義是有規律的,並不是隨意定義的。其中,大於或者等於CANCELLED的常量為CANCELLED、INTERRUPTING和INTERRUPTED,這三個狀態均可以表示線程已經被取消。當狀態不等於NEW時,可以表示任務已經完成。

通過這里,大家可以學到一點:以後在編碼過程中,要按照規律來定義自己使用的狀態,尤其是涉及到業務中有頻繁的狀態變更的操作,有規律的狀態可使業務處理變得事半功倍,這也是通過看別人的源碼設計能夠學到的,這里,建議大家還是多看別人寫的優秀的開源框架的源碼。

(4)取消方法

我們繼續向下看源碼,接下來,看到的是cancel(boolean)方法,如下所示。

接下來,拆解cancel(boolean)方法。在cancel(boolean)方法中,首先判斷任務的狀態和CAS的操作結果,如果任務的狀態不等於NEW或者CAS的操作返回false,則直接返回false,表示任務取消失敗。如下所示。

接下來,在try代碼塊中,首先判斷是否可以中斷當前任務所在的線程來取消任務的運行。如果可以中斷當前任務所在的線程,則以一個Thread臨時變數來指向運行任務的線程,當指向的變數不為空時,調用線程對象的interrupt()方法來中斷線程的運行,最後將線程標記為被中斷的狀態。如下所示。

這里,發現變更任務狀態使用的是UNSAFE.putOrderedInt()方法,這個方法是個什麼鬼呢?點進去看一下,如下所示。

可以看到,又是一個本地方法,嘿嘿,這里先不管它,後續文章會詳解這些方法的作用。

接下來,cancel(boolean)方法會進入finally代碼塊,如下所示。

可以看到在finallly代碼塊中調用了finishCompletion()方法,顧名思義,finishCompletion()方法表示結束任務的運行,接下來看看它是如何實現的。點到finishCompletion()方法中看一下,如下所示。

在finishCompletion()方法中,首先定義一個for循環,循環終止因子為waiters為null,在循環中,判斷CAS操作是否成功,如果成功進行if條件中的邏輯。首先,定義一個for自旋循環,在自旋循環體中,喚醒WaitNode堆棧中的線程,使其運行完成。當WaitNode堆棧中的線程運行完成後,通過break退出外層for循環。接下來調用done()方法。done()方法又是個什麼鬼呢?點進去看一下,如下所示。

可以看到,done()方法是一個空的方法體,交由子類來實現具體的業務邏輯。

當我們的具體業務中,需要在取消任務時,執行一些額外的業務邏輯,可以在子類中覆寫done()方法的實現。

(5)get()方法

繼續向下看FutureTask類的代碼,FutureTask類中實現了兩個get()方法,如下所示。

沒參數的get()方法為當任務未運行完成時,會阻塞,直到返回任務結果。有參數的get()方法為當任務未運行完成,並且等待時間超出了超時時間,會TimeoutException異常。

兩個get()方法的主要邏輯差不多,一個沒有超時設置,一個有超時設置,這里說一下主要邏輯。判斷任務的當前狀態是否小於或者等於COMPLETING,也就是說,任務是NEW狀態或者COMPLETING,調用awaitDone()方法,看下awaitDone()方法的實現,如下所示。

接下來,拆解awaitDone()方法。在awaitDone()方法中,最重要的就是for自旋循環,在循環中首先判斷當前線程是否被中斷,如果已經被中斷,則調用removeWaiter()將當前線程從堆棧中移除,並且拋出InterruptedException異常,如下所示。

接下來,判斷任務的當前狀態是否完成,如果完成,並且堆棧句柄不為空,則將堆棧中的當前線程設置為空,返回當前任務的狀態,如下所示。

當任務的狀態為COMPLETING時,使當前線程讓出CPU資源,如下所示。

如果堆棧為空,則創建堆棧對象,如下所示。

如果queued變數為false,通過CAS操作為queued賦值,如果awaitDone()方法傳遞的timed參數為true,則計算超時時間,當時間已超時,則在堆棧中移除當前線程並返回任務狀態,如下所示。如果未超時,則重置超時時間,如下所示。

如果不滿足上述的所有條件,則將當前線程設置為等待狀態,如下所示。

接下來,回到get()方法中,當awaitDone()方法返回結果,或者任務的狀態不滿足條件時,都會調用report()方法,並將當前任務的狀態傳遞到report()方法中,並返回結果,如下所示。

看來,這里還要看下report()方法啊,點進去看下report()方法的實現,如下所示。

可以看到,report()方法的實現比較簡單,首先,將outcome數據賦值給x變數,接下來,主要是判斷接收到的任務狀態,如果狀態為NORMAL,則將x強轉為泛型類型返回;當任務的狀態大於或者等於CANCELLED,也就是任務已經取消,則拋出CancellationException異常,其他情況則拋出ExecutionException異常。

至此,get()方法分析完成。注意:一定要理解get()方法的實現,因為get()方法是我們使用Future介面和FutureTask類時,使用的比較頻繁的一個方法。

(6)set()方法與setException()方法

繼續看FutureTask類的代碼,接下來看到的是set()方法與setException()方法,如下所示。

通過源碼可以看出,set()方法與setException()方法整體邏輯幾乎一樣,只是在設置任務狀態時一個將狀態設置為NORMAL,一個將狀態設置為EXCEPTIONAL。

至於finishCompletion()方法,前面已經分析過。

(7)run()方法與runAndReset()方法

接下來,就是run()方法了,run()方法的源代碼如下所示。

可以這么說,只要使用了Future和FutureTask,就必然會調用run()方法來運行任務,掌握run()方法的流程是非常有必要的。在run()方法中,如果當前狀態不是NEW,或者CAS操作返回的結果為false,則直接返回,不再執行後續邏輯,如下所示。

接下來,在try代碼塊中,將成員變數callable賦值給一個臨時變數c,判斷臨時變數不等於null,並且任務狀態為NEW,則調用Callable介面的call()方法,並接收結果數據。並將ran變數設置為true。當程序拋出異常時,將接收結果的變數設置為null,ran變數設置為false,並且調用setException()方法將任務的狀態設置為EXCEPTIONA。接下來,如果ran變數為true,則調用set()方法,如下所示。

接下來,程序會進入finally代碼塊中,如下所示。

這里,將runner設置為null,如果任務的當前狀態大於或者等於INTERRUPTING,也就是線程被中斷了。則調用()方法,接下來,看下()方法的實現。

可以看到,()方法的實現比較簡單,當任務的狀態為INTERRUPTING時,使用while()循環,條件為當前任務狀態為INTERRUPTING,將當前線程佔用的CPU資源釋放,也就是說,當任務運行完成後,釋放線程所佔用的資源。

runAndReset()方法的邏輯與run()差不多,只是runAndReset()方法會在finally代碼塊中將任務狀態重置為NEW。runAndReset()方法的源代碼如下所示,就不重復說明了。

(8)removeWaiter()方法

removeWaiter()方法中主要是使用自旋循環的方式來移除WaitNode中的線程,比較簡單,如下所示。

最後,在FutureTask類的最後,有如下代碼。

關於這些代碼的作用,會在後續深度解析CAS文章中詳細說明,這里就不再探討。

至此,關於Future介面和FutureTask類的源碼就分析完了。

好了,今天就到這兒吧,我是冰河,我們下期見~~

『貳』 常見的Java開發工具有哪些

常見的Java開發工具的特點

1、JDK()Java開發工具集

從初學者角度來看,採用JDK開發Java程序能夠很快理解程序中各部分代碼之間的關系,有利於理解Java面向對象的設計思想。JDK的另一個顯著特點是隨著Java(J2EE、J2SE以及J2ME)版本的升級而升級。但它的缺點也是非常明顯的就是從事大規模企業級Java應用開發非常困難,不能進行復雜的Java軟體開發,也不利於團體協同開發。

2、NetBeans

NetBeans是開放源碼的Java集成開發環境(IDE),適用於各種客戶機和Web應用。

是Sun公司最新發布的商用全功能JavaIDE,支持Solaris、Linux和Windows平台,適於創建和部署2層JavaWeb應用和n層J2EE應用的企業開發人員使用。NetBeans是業界第一款支持創新型Java開發的開放源碼IDE。開發人員可以利用業界強大的開發工具來構建桌面、Web或移動應用。同時,通過NetBeans和開放的API的模塊化結構,第三方能夠非常輕松地擴展或集成NetBeans平台。NetBeans3.5.1主要針對一般Java軟體的開發者,而則主要針對企業做網路服務等應用的開發者。Sun不久還將推出ProjectRave,其目標是幫助企業的開發者進行軟體開發。NetBeans3.5.1版本與其他開發工具相比,最大區別在於不僅能夠開發各種台式機上的應用,而且可以用來開發網路服務方面的應用,可以開發基於J2ME的移動設備上的應用等。在NetBeans3.5.1基礎上,Sun開發出了,為用戶提供了一個更加先進的企業編程環境。在新的里有一個應用框架,開發者可以利用這些模塊快速開發自己在網路服務方面的各種應用程序。

3、Borland的JBuilder

Jbuilder進入了Java集成開發環境的王國,它滿足很多方面的應用,尤其是對於伺服器方以及EJB開發者們來說。下面簡單介紹一下Jbuilder的特點:

1)Jbuilder支持最新的Java技術,包括Applets、JSP/Servlets、JavaBean以及EJB()的應用。

2)用戶可以自動地生成基於後端資料庫表的EJBJava類,Jbuilder同時還簡化了EJB的自動部署功能.此外它還支持CORBA,相應的向導程序有助於用戶全面地管理IDL(分布應用程序所必需的介面定義語言)和控制遠程對象。

3)Jbuilder支持各種應用伺服器。Jbuilder與緊密集成,同時支持,支持EJB1.1和EJB2.0,可以快速開發J2EE的電子商務應用。

4)Jbuilder能用Servlet和JSP開發和調試動態Web應用。

5)利用Jbuilder可創建(沒有專有代碼和標記)純Java2應用。由於Jbuilder是用純Java語言編寫的,其代碼不含任何專屬代碼和標記,它支持最新的Java標准。

6)Jbuilder擁有專業化的圖形調試介面,支持遠程調試和多線程調試,調試器支持各種JDK版本,包括J2ME/J2SE/J2EE。JBuilder環境開發程鍵伏陸序方便,它是純的Java開發環境,適合企業的J2EE開發;缺點是往往一開始人們難於把握整個程序各部分之間的關系,對機器的硬體要求較高,比較吃內存,這時運行速度顯得較慢。

4、Oracle的JDeveloper

(定為9.0版,最新為10g)為構建具有J2EE功能,XML和Webservices的復雜的,多層的Java應用程序提供了一個完全集成廳祥的開發環境。它為運用Oracle9i資料庫和應用伺服器的開發人員提供特殊的功能和增強性能,除此以外,它也有資格成為用於多種用途Java開發的一個強大的工具。

的主要特點如下:

①具有UML(,一體化建模語言)建模功能。可以將業務對象及e-business應用模型化。

②配備有高速Java調試器(Debuger)、內置Profiling工具、提高稿頃代碼質量的工具「CodeCoach」等。

③支持SOAP()「簡單對象訪問協議」、UDDI(,DiscoveryandIntegration)「統一描述、發現和集成協議」

、WSDL()「WEB服務描述語言」等Web服務標准。JDeveloper不僅僅是很好的Java編程工具,而且是OracleWeb服務的延伸,支持ApacheSOAP,以及9iAS,可擴充的環境和XML和WSDL語言緊密相關。Oracle9iJdeveloper完全利用Java編寫,能夠與以前的Oracle伺服器軟體以及其他廠商支持J2EE的應用伺服器產品相兼容,而且在設計時著重針對Oracle9i,能夠無縫化跨平台之間的應用開發,提供了業界第一個完整的、集成了J2EE和XML的開發環境,允許開發者快速開發可以通過Web、無線設備及語音界面訪問的Web服務和交易應用,以往只能通過將傳統Java編程技巧與最新模塊化方式結合到一個單一集成的開發環境中之後才能完成J2EE應用開發生命周期管理的事實,從根本上得到改變。缺點就是對於初學者來說,較復雜,也比較難。

5、IBM的VisualAgeforJava

VisualAgeforJava是一個非常成熟的開發工具,它的特性以於IT開發者和業余的Java編程人員來說都是非常用有用的。它提供對可視化編程的廣泛支持,支持利用CICS連接遺傳大型機應用,支持EJB的開發應用,支持與Websphere的集成開發,方便的bean創建和良好的快速應用開發(RAD)支持和無文件式的文件處理。

IBM為建設Web站點所推出的及其包含的Visual

AgeforJavaProfessionalEdition軟體已全面轉向以Java為中心,這樣,Java開發人員對WebSphere全套工具的感覺或許會好了許多。Studio所提供的工具有:Web站點管理、快速開發JDBC頁向導程序、HTML編輯器和HTML語法檢查等。這確實是個不錯的HTML站點頁面編輯環境。Studio和VisualAge集成度很高,菜單中提供了在兩種軟體包之間快速移動代碼的選項。這就讓使用Studio的Web頁面設計人員和使用VisualAge的Java程序員

可以相互交換文件、協同工作。VisualAgeforJava支持團隊開發,內置的代碼庫可以自動地根據用戶做出改動而修改程序代碼,這樣就可以很方便地將目前代碼和早期版本做出比較。與VisualAge緊密結合的WebsphereStudio本身並不提供源代碼和版本管理的支持,它只是包含了一個內置文件鎖定系統,當編輯項目的時候可以防止其他人對這些文件的錯誤修改,軟體還支持諸如MicrosoftVisualSourceSafe這樣的第三方源代碼控制系統。VisualAgeforJava完全面向對象的程序設計思想使得開發程序非常快速、高效。你可以不編寫任何代碼就可以設計出一個典型的應用程序框架。VisualAgeforJava作為IBM電子商務解決方案其中產品之一,可以無縫地與其他IBM產品,如WebSphere、DB2融合,迅速完成從設計、開發到部署應用的整個過程。VisualAgeforJava獨特的管理文件方式使其集成外部工具非常困難,你無法讓VisualAgeforJava與其他工具一起聯合開發應用。

6、BEA的WebLogicWorkshop

BEAWebLogicWorkshop是一個統一、簡化、可擴展的開發環境,使所有的開發人員都能在BEAWebLogicEnterprisePlatform之上構建基於標準的企業級應用,從而提高了開發部門的生產力水平,加快了價值的實現。WebLogicWorkshop除了提供便捷的Web服務之外,它能夠用於創建更多種類的應用。作為整個BEAWebLogicPlatform的開發環境。不管是創建門戶應用、編寫工作流、還是創建Web應用,Workshop8.1都可以幫助開發人員更快更好地完成。WebLogicWorkshop的主要特點如下:

①使J2EE開發切實可行,提高開發效率

BEAWebLogicWorkshop使開發人員遠離J2EE內在的復雜性,集中精力專注業務邏輯,無須操心單調乏味的基礎結構代碼。這種創新意味著,已被企業驗證的J2EE的強大功能,最終被大多數不熟悉Java和J2EE的應用開發人員所掌握,從而使IT部門的工作效率提高一個數量級。可視化設計器以及直觀的概念,如事件、屬性和控制項等,實現了基於事件的開發。Workshop簡化的程序設計模型,使開發人員不必掌握復雜的J2EEAPI和面向對象的程序設計原理。所有開發人員,包括J2EE專家和具有可視化和過程化語言技能的應用開發人員在內,都可以共同工作在BEAWebLogicEnterprisePlatform之上。Workshop的可視化開發環境,創建帶有代碼注釋的標准Java文件,用來說明由運行時框架實施的企業級需求。J2EE和其他高級開發人員,藉助功能強大的代碼編輯功能,可以訪問Java源代碼,從而彌補了可視化設計器的不足。

②構建企業級應用

通過在可伸縮、安全可靠的企業級架構上實施各種應用,BEAWebLogicWorkshop大大降低了開發風險。而且,所有應用的創建都使用標準的J2EE組件,既保護了您的技術投資,又保持了最大的靈活性。BEAWebLogicWorkshop運行框架,是統一整個架構的匯聚層,使單一、簡化的程序設計模型擴展到所有的BEAWebLogicEnterprisePlatform應用類型。通過解釋設計時創建的注釋代碼,運行時框架可以實現必要的J2EE組件,並且提取出與J2EE應用開發有關的所有底層細節。

③降低IT復雜性BEAWebLogicWorkshop提供各種Java控制項,使得與IT資源的連接更輕而易舉。另外,在構建任何BEAWebLogicPlatform的應用中,Java控制項不僅可擴展而且完全相同。這種強大、有效的方法能夠:降低IT技術的復雜性,優化信息的可用性,推動包含"最佳業務方案"的可重用服務的開發,使開發人員能以更低的成本、更短的時間實現更大的產出。

利用BEAWebLogicWorkshop,任何開發人員都能以最大的生產效率,構建各種Web服務、Web應用、門戶和集成項目。BEAWebLogicWorkshop是BEA的產品戰略核心,它幫助客戶接觸和利用面向服務架構(SOA)的強大功能。BEAWeblogicWorkshop8.1極大簡化了當前實際企業集成環境中企業級應用和服務的構建,並成為全面支持關鍵企業級應用(如非同步、真正松耦合和粗粒度消息傳送等)的自然選擇。它的缺點就是過於復雜,對於初學者來說,理解起來較為困難。

7、WebGain的VisualCafeforJavaVisualCafe是只能在Symantec公司的Java虛擬機、Netscape公司的Java虛擬機和Microsoft虛擬機上工作的調試器。這對於開發者來講是一個重要的特性,因為用戶開發的Java代碼中的許多軟體bug就可能中會在某種特定的虛擬機上起作用。在修改後進行編譯基繼續進行調試時,VisualCafe會自動將文件存檔,使用VisualCafe創建的原生應用具有許多特點。除了明顯的速度提高之外,Symantec使類庫的二進制方式比正常的JDK小VisualCafe為所指定的關系自動生成或更新必要的Java代碼。利用VisualCafe,用戶可以從一個標准對象資料庫中集合完整的Java應用程序和Applet,而不必再編寫源代碼。VisualCafe還提供了一個擴充的源代碼開發工具集。VisualCafe綜合了Java軟體的可視化源程序開發工具,它允許開發人員在可視化視圖和源視圖之間進行有效地轉換。在可視化視圖中進行的修改立即反映在源代碼中。對源代碼的改變自動更新可視化視圖。VisualCafe具有許多源文件方面的特性,如全局檢索和替換。絕大多數Java開發工具的文獻的問題在於簡單地挨個介紹開發工具的每部分組件,但用戶在開應用時還需要一個面向任務的手冊,利用這個手冊你可以不必知道工具每一部分的特定功能就可以開始創建自己的應用。VisualCafe提供了非常全面的用戶指南,它對最開始的安裝到創建第一個Java應用和Applet都提供了全面的幫助,VisualCafe將自動生成所指明關系的必要Java代碼。VisualCafe可以在Windows95和WindowsNT平台下運行,Symantec公司為Java開發工作提供一個在Macintosh操作系統下可以運行的RAD工具。VisualCafe編譯器速度很快,在國際化支持方面比較突出;缺點就是對於初學者來說,較復雜,也比較難。

8、Macromedia的JRUN

Macromedia公司的JRun是一個具有最廣闊適用性的Java引擎,用於開發及實施由JavaServlets和JavaServerPages編寫的伺服器端Java應用。JRun是第一個完全支持JSP1.0規格書的商業化產品,全球有超過80,000名開發人員使用JRun在他們已有的Web伺服器上添加伺服器端Java的功能。其中Web伺服器包括了MicrosoftIIS,NetscapeEnterpriseServer,Apache等。JRun是開發實施伺服器端Java的先進引擎。如果我們希望在我們的Web應用中添加伺服器端Java功能,那麼JRun將成為我們的正確選擇。JRun目前有3個版本,它是第一個支持JavaServerPages(JSP)規格書1.0的商業化產品。JSP是一種強大的伺服器端技術,它是用於創建復雜Web應用的一整套快速應用開發系統。JRun可以使我們開始開發並測試Java應用。它最多接受5個並發的連接並且包括全部JavaServletAPI,支持JavaServerPages(JSP),支持所有主要的Webservers和計算機平台。JRunPro能夠在生產環境下承受大訪問量的負載,幫助我們實施應用、服務或Web站點(包括內聯網)。JRunPro支持無限量並發式連接運行多個Java虛擬機,包括多個並發的Java虛擬機(JVM)。提供一個遠程管理applet以及一個遠程可再分布式的管理applet。JRunProUnlimited包括了所有JRunPro的功能,除次以外,還可以運行無限量的,並發的JVM。JRun依靠其內置的JRunWebServer可以單獨運行。使用伺服器端Java,用戶可以開發出復雜的商業應用系統。最重要的一點是,由於servlets的平台獨立性,以及更加簡單的開發、更快速的實施、更經濟的維護成本,它是CGI(CommonGatewayInterface)或Perlscripts的極佳的替代產品。缺點就是對於初學者來說,較復雜,也比較難。

9、JCreator

JCreator是一個Java程序開發工具,也是一個Java集成開發環境(IDE)。無論你是要開發Java應用程序或者網頁上的Applet元件都難不倒它。在功能上與Sun公司所公布的JDK等文字模式開發工具相較之下來得容易,還允許使用者自訂義操作窗口界面及無限Undo/Redo等功能。JCreator為用戶提供了相當強大的功能,例如項目管理功能,項目模板功能,可個性化設置語法高亮屬性、行數、類瀏覽器、標簽文檔、多功能編繹器,向導功能以及完全可自定義的用戶界面。通過JCreator,我們不用激活主文檔而直接編繹或運行我們的JAVA程序。JCreator能自動找到包含主函數的文件或包含Applet的Html文件,然後它會運行適當的工具。在JCreator中,我們可以通過一個批處理同時編繹多個項目。JCreator的設計接近Windows界面風格,用戶對它的界面比較熟悉。其最大特點是與我們機器中所裝的JDK完美結合,是其它任何一款IDE所不能比擬的。它是一種初學者很容易上手的java開發工具,缺點是只能進行簡單的程序開發,不能進行企業J2EE的開發應用。

110、MicrosoftVJ

VisualJ是Microsoft公司推出的可視化的Java語言集成開發環境(IDE),為Java編程人員提供了一個新的開發環境,是一個相當出色的開發工具。無論集成性、編譯速度、調試功能、還是易學易用性,都體現了Microsoft的一慣風格。VisualJ具有

下面的特點:

1)VisualJ把Java虛擬機(JVM)作為獨立的操作系統組件放入Windows,使之從瀏覽器中獨立出來。

2)Microsoft的應用基本類庫(AFC,)對SUN公司的JDK作了擴展,使應用基本類庫更加適合在Windows下使用。

3)VisualJ的調試器支持動態調試,包括單步執行、設置斷點、觀察變數數值等。

4)VisualJ提供了一些程序向導(Wizards)和生成器(Builders),它們可以方便地幫助用戶快速地生成Java程序,幫助你在自己的工程中創建和修改文件。

5)VisualJ界面友好,其代碼編輯器具有智能感知、聯機編譯等功能,使程序編寫十分方便。VisualJ中建立了Java的WFC,這一新的應用程序框架能夠直接訪問Windows應用程序介面(API),使你能夠用Java語言編寫完全意義上的Windows應用程序。

6)VisualJ中表單設計器的快速應用開發特性使用WFC創建基於表單的應用程序變得輕松、簡單。通過WFC可以方便地使用ActiveX數據對象(ADO,ActiveXDataObjects)來檢索數據和執行簡單數據的綁定。通過在表單設計器中使用ActiveX數據對象,可以快速地在表單中訪問和顯示數據。VisualJ能結合微軟的一貫的編程風格,很方便進行Java的應用開發,但它的移植性較差,不是純的Java開發環境。

11、Eclipse

Eclipse是一種可擴展的開放源代碼IDE。2001年11月,IBM公司捐出價值4,000萬美元的源代碼組建了Eclipse聯盟,並由該聯盟負責這種工具的後續開發。集成開發環境(IDE)經常將其應用范圍限定在「開發、構建和調試」的周期之中。為了幫助集成開發環境(IDE)克服目前的局限性,業界廠商合作創建了Eclipse平台。Eclipse允許在同一IDE中集成來自不同供應商的工具,並實現了工具之間的互操作性,從而顯著改變了項目工作流程,使開發者可以專注在實際的嵌入式目標上。Eclipse框架的這種靈活性來源於其擴展點。它們是在XML中定義的已知介面,並充當插件的耦合點。擴展點的范圍包括從用在常規表述過濾器中的簡單字元串,到一個Java類的描述。任何Eclipse插件定義的擴展點都能夠被其它插件使用,反之,任何Eclipse插件也可以遵從其它插件定義的擴展點。除了解由擴展點定義的介面外,插件不知道它們通過擴展點提供的服務將如何被使用。利用Eclipse,我們可以將高級設計(也許是採用UML)與低級開發工具(如應用調試器等)結合在一起。如果這些互相補充的獨立工具採用Eclipse擴展點彼此連接,那麼當我們用調試器逐一檢查應用時,UML對話框可以突出顯示我們正在關注的器件。事實上,由於Eclipse並不了解開發語言,所以無論Java語言調試器、C/C調試器還是匯編調試器都是有效的,並可以在相同的框架內同時瞄準不同的進程或節點。Eclipse的最大特點是它能接受由Java開發者自己編寫的開放源代碼插件,這類似於微軟公司的VisualStudio和Sun微系統公司的NetBeans平台。Eclipse為工具開發商提供了更好的靈活性,使他們能更好地控制自己的軟體技術。Eclipse聯盟已經宣布將在2004年中期發布其3.0版軟體。這是一款非常受歡迎的java開發工具,這國內的用戶越來越多,實際上實用它java開發人員是最多的。缺點就是較復雜,對初學者來說,理解起來比較困難。

『叄』 Java入門如何學習怎麼學好Java開發

Java如今已經是全球編程語言排名第一的語言,運用廣泛,前景廣闊,而且很多軟體的開發都離不開Java,而在以Java為核心的開發領域中,JavaEE程序員的需求量10年來一直居於首位!也正是因為如此很多的小夥伴參加Java培訓,當然也有部分小夥伴想要先了解一下,Java到底是什麼,怎麼可以學好,有個大概的認知才參加Java培訓或者Java學習,那麼Java入門如何學習?怎麼學好Java開發?學習要點是什麼?掌握以下內容讓Java入門更快,掌握Java更輕松。

一、Java入門如何學習?怎麼學好Java開發?Java必備基礎知識

1、你需要精通面向對象分析與設計(OOA/OOD)、涉及模式(GOF,J2EEDP)以及綜合模式。你應該十分了解UML,尤其是class,object,interaction以及statediagrams。

2、你需要學習JAVA語言的基礎知識以及它的核心類庫(collections,serialization,streams,networking,multithreading,reflection以及其他)。

3、你應該了解JVM,classloaders,classreflect,以及垃圾回收的基本工作機制等。你應該有能力反編譯一個類文件並且明白一些基本的匯編指令。

4、你需要學習java資料庫技術,如JDBCAPI並且會使用至少一種persistence/ORM構架,例如Hibernate,JDO,CocoBase,TopLink,InsideLiberator或者iBatis。

5、你應該熟練掌握一種JAVAIDE例如sunOne,netBeans,IntelliJIDEA或者Eclipse。(有些人更喜歡VI或EMACS來編寫文件。隨便你用什麼了:)

6、JAVA(精確的說是有些配置)是冗長的,它需要很多的人工代碼(例如EJB),所以你需要熟悉代碼生成工具,例如XDoclet等等。

二、Java入門如何學習?怎麼學好Java開發?Java學習5大階段

階段1:Java設計和編程思想掌握的技能:

精通面向對象思想和Java基礎語法;熟練Java異常處理;精通JavaI/O操作;掌握Java多線程操作;精通Jjava集合類的使用;掌握Java網路編程;精通資料庫/JDBC的使用。

階段2:Web前端開發掌握的技能:

掌握html+css+js相關技術;通過H5相關的庫快速編寫代碼;搭建符合大數據要求的界面,使前端+後端+大數據實現三維一體。

階段3:JavaEE進階掌握的技能:

掌握Tomcat/Nginx伺服器搭建;掌握Jsp&Servlet的使用;精通SSH、SSM兩大流行框架的原理及使用。

階段4:大數據核心知識掌握的技能:

了解hadoop機制原理;了解hadoop集群搭建過程;了解HdfsAPI使用以及mr編程模型;了解hive、hbase、sqoop、flume等組件的使用方法。

階段5:綜合項目掌握的技能:

大型網上商城項目、當日達項目、點餐系統、網上書城、OA辦公自動化項目、CRM客戶關系管理項目等企業真實綜合項目開發能力,達到中高級Java工程師的技術水平。

Java入門如何學習?怎麼學好Java開發?這是一個從易到難再到易的過程,需要一步一個腳印去學習,嚴格意義上說,java是一門較復雜的編程語言,不下苦功,是不可能學到非常好的層次。

同樣,學習java為了最快的提升效率和保證你能夠學會,還是需要找一家正規專業的培訓機構,接受系統化的學習和掌握java實戰項目,才能從入門到精通,更快成為一名合格的java工程師。

學Java當然要到17年技術積累的昆明北大青鳥教育,引領行業的技術,一線技術專家,15萬家就業合作企業。技術,求職,高薪,你的所有問題都能一站式解決!

2月份Java免費訓練營火熱報名中,經典Java免費課程限額送,一線技術大牛,為你解析行業前景,就業形勢,面試真經,讓你一站式成為Java大牛工程師,名額有限,填寫下面的表格即可獲得試聽資格!

『肆』 做Java開發都需要學什麼怎麼學

以下介紹的課程主要針對零基礎大數據工程師每個階段進行通俗易懂簡易介紹,方面大家更好的了解大數據學習課程。課程框架是科多大數據的零基礎大數據工程師課程。

一、第一階段:靜態網頁基礎(HTMLCSS)

1.難易程度:一顆星

2.課時量(技術知識點階段項目任務綜合能力)

3.主要技術包括:html常用標簽、CSS常見布局、樣式、定位等、靜態頁面的設計製作方式等

4.描述如下:

從技術層面來說,該階段使用的技術代碼很簡單、易於學習、方便理解。從後期課程層來說,因為我們重點是大數據,但前期需要鍛煉編程技術與思維。經過我們多年開發和授課的項目經理分析,滿足這兩點,目前市場上最好理解和掌握的技術是J2EE,但J2EE又離不開頁面技術。所以第一階段我們的重點是頁面技術。採用市場上主流的HTMlCSS。

二、第二階段:JavaSEJavaWeb

1.難易程度:兩顆星

2.課時量(技術知識點階段項目任務綜合能力)

3.主要技術包括:java基礎語法、java面向對象(類、對象、封裝、繼承、多態、抽象類、介面、常見類、內部類、常見修飾符等)、異常、集合、文件、IO、MYsql(基本SQL語句操作、多表查詢、子查詢、存儲過程、事務、分布式事務)JDBC、線程、反射、Socket編程、枚舉、泛型、設計模式

4.描述如下:

稱為Java基礎,由淺入深的技術點、真實商業項目模塊分析、多種存儲方式的設計

與實現。該階段是前四個階段最最重要的階段,因為後面所有階段的都要基於此階段,也是學習大數據緊密度最高的階段。本階段將第一次接觸團隊開發、產罩游出具有前後台(第一階段技術第二階段的技術綜合應用)的真實項目。

三、第三階段:前端框架

1.難易程序:兩星

2.課時量(技術知識點階段項目任務綜合能力):64課時

3.主要技術包括:Java、Jquery、註解反射一起使用,XML以及XML解析、解析dom4j、jxab、jdk8.0新特性、SVN、Maven、easyui

4.描述如下:

前兩個階段的基礎上化靜為動,可以實現讓我們網頁內容更加的豐富,當然如果從市場人員層面來說,有專業的前端設計人員,我們設計本階段的目標在於前端的技術可以更直觀的鍛煉人的思維和設計能力。同時我們也將第二階段的高級特性融入到本階段。使學習者更上一層樓。

四、第四階段:企業物余銷級開發框架

1.難易程序:三顆星

2.課時量(技術知識點階段項目任務綜合能力)

3.主要技術包括:Hibernate、Spring、SpringMVC、log4jslf4j整合、myBatis、struts2、Shiro、redis、流程引擎activity,爬蟲技術nutch,lucene,、Tomcat集群和熱備、MySQL讀寫分離

4.描述如下:

如果將整個JAVA課程比作一個糕點店,那前面三個階段可以做出一個武大郎燒餅(因為是純手工-太麻煩),而學習框架是可以開一個星巴克(高科技設備-省時省力)。從J2EE開發工程師的任職要求來說,該階段所用到的技術是必須掌握,而我們所授的課程是高於市場(市場上主流三大框架,我們進行七大框架技術傳授)、而且有真實的商業項目驅動。需求文檔、概要設計、詳細設計、源碼測試、部署、安裝手冊等都會進行講解。

五、第五階段:初識大數據

1.難易程度:三顆星

2.課時量(技術知識點階段項目任務綜合能力)

3.主要技術包括:大數據前篇(什麼是大數據,應用場景,如何學習大資料庫,虛擬機概念和安裝等)、Linux常見命令(文件管理、系統管理、磁碟管理)、LinuxShell編程(SHELL變數、循環控制、應用)、Hadoop入門(Hadoop組成、單機版環境、目錄結構、HDFS界面、MR界面、簡單的SHELL、java訪問hadoop)、HDFS(簡介、SHELL、IDEA開發工具使用、全分布式集群搭建)、MapRece應用(中間計算過程、Java操作MapRece、程序運行、日誌監控)、Hadoop高級應用(YARN框架介紹、配置項與優化、CDH簡介、環境搭建)、擴展(MAP端優化,COMBINER使用方法見,TOPK,SQOOP導出,其它虛擬機VM的快照,許可權管理命令,AWK與SED命令)

4.描述如下:

該階段設計是為了讓新人能夠對大數據有一個相對的大概念怎毀悉么相對呢?在前置課程JAVA的學習過後能夠理解程序在單機的電腦上是如何運行的。現在,大數據呢?大數據是將程序運行在大規模機器的集群中處理。大數據當然是要處理數據,所以同樣,數據的存儲從單機存儲變為多機器大規模的集群存儲。

(你問我什麼是集群?好,我有一大鍋飯,我一個人可以吃完,但是要很久,現在我叫大家一起吃。一個人的時候叫人,人多了呢?是不是叫人群啊!)

那麼大數據可以初略的分為:大數據存儲和大數據處理所以在這個階段中呢,我們課程設計了大數據的標准:HADOOP大數據的運行呢並不是在咋們經常使用的WINDOWS7或者W10上面,而是現在使用最廣泛的系統:LINUX。

六、第六階段:大數據資料庫

1.難易程度:四顆星

2.課時量(技術知識點階段項目任務綜合能力)

3.主要技術包括:Hive入門(Hive簡介、Hive使用場景、環境搭建、架構說明、工作機制)、HiveShell編程(建表、查詢語句、分區與分桶、索引管理和視圖)、Hive高級應用(DISTINCT實現、groupby、join、sql轉化原理、java編程、配置和優化)、hbase入門、HbaseSHELL編程(DDL、DML、Java操作建表、查詢、壓縮、過濾器)、細說Hbase模塊(REGION、HREGIONSERVER、HMASTER、ZOOKEEPER簡介、ZOOKEEPER配置、Hbase與Zookeeper集成)、HBASE高級特性(讀寫流程、數據模型、模式設計讀寫熱點、優化與配置)

4.描述如下:

該階段設計是為了讓大家在理解大數據如何處理大規模的數據的同時。簡化咋們的編寫程序時間,同時提高讀取速度。

怎麼簡化呢?在第一階段中,如果需要進行復雜的業務關聯與數據挖掘,自行編寫MR程序是非常繁雜的。所以在這一階段中我們引入了HIVE,大數據中的數據倉庫。這里有一個關鍵字,數據倉庫。我知道你要問我,所以我先說,數據倉庫呢用來做數據挖掘分析的,通常是一個超大的數據中心,存儲這些數據的呢,一般為ORACLE,DB2,等大型資料庫,這些資料庫通常用作實時的在線業務。

總之,要基於數據倉庫分析數據呢速度是相對較慢的。但是方便在於只要熟悉SQL,學習起來相對簡單,而HIVE呢就是這樣一種工具,基於大數據的SQL查詢工具,這一階段呢還包括HBASE,它為大數據裡面的資料庫。納悶了,不是學了一種叫做HIVE的數據「倉庫」了么?HIVE是基於MR的所以查詢起來相當慢,HBASE呢基於大數據可以做到實時的數據查詢。一個主分析,另一個主查詢

七、第七階段:實時數據採集

1.難易程序:四顆星

2.課時量(技術知識點階段項目任務綜合能力)

3.主要技術包括:Flume日誌採集,KAFKA入門(消息隊列、應用場景、集群搭建)、KAFKA詳解(分區、主題、接受者、發送者、與ZOOKEEPER集成、Shell開發、Shell調試)、KAFKA高級使用(java開發、主要配置、優化項目)、數據可視化(圖形與圖表介紹、CHARTS工具分類、柱狀圖與餅圖、3D圖與地圖)、STORM入門(設計思想、應用場景、處理過程、集群安裝)、STROM開發(STROMMVN開發、編寫STORM本地程序)、STORM進階(java開發、主要配置、優化項目)、KAFKA非同步發送與批量發送時效,KAFKA全局消息有序,STORM多並發優化

4.描述如下:

前面的階段數據來源是基於已經存在的大規模數據集來做的,數據處理與分析過後的結果是存在一定延時的,通常處理的數據為前一天的數據。

舉例場景:網站防盜鏈,客戶賬戶異常,實時徵信,遇到這些場景基於前一天的數據分析出來過後呢?是否太晚了。所以在本階段中我們引入了實時的數據採集與分析。主要包括了:FLUME實時數據採集,採集的來源支持非常廣泛,KAFKA數據數據接收與發送,STORM實時數據處理,數據處理秒級別

八、第八階段:SPARK數據分析

1.難易程序:五顆星

2.課時量(技術知識點階段項目任務綜合能力)

3.主要技術包括:SCALA入門(數據類型、運算符、控制語句、基礎函數)、SCALA進階(數據結構、類、對象、特質、模式匹配、正則表達式)、SCALA高級使用(高階函數、科里函數、偏函數、尾迭代、自帶高階函數等)、SPARK入門(環境搭建、基礎結構、運行模式)、Spark數據集與編程模型、SPARKSQL、SPARK進階(DATAFRAME、DATASET、SPARKSTREAMING原理、SPARKSTREAMING支持源、集成KAFKA與SOCKET、編程模型)、SPARK高級編程(Spark-GraphX、Spark-Mllib機器學習)、SPARK高級應用(系統架構、主要配置和性能優化、故障與階段恢復)、SPARKMLKMEANS演算法,SCALA隱式轉化高級特性

4.描述如下:

同樣先說前面的階段,主要是第一階段。HADOOP呢在分析速度上基於MR的大規模數據集相對來說還是挺慢的,包括機器學習,人工智慧等。而且不適合做迭代計算。SPARK呢在分析上是作為MR的替代產品,怎麼替代呢?先說他們的運行機制,HADOOP基於磁碟存儲分析,而SPARK基於內存分析。我這么說你可能不懂,再形象一點,就像你要坐火車從北京到上海,MR就是綠皮火車,而SPARK是高鐵或者磁懸浮。而SPARK呢是基於SCALA語言開發的,當然對SCALA支持最好,所以課程中先學習SCALA開發語言。

在科多大數據課程的設計方面,市面上的職位要求技術,基本全覆蓋。而且並不是單純的為了覆蓋職位要求,而是本身課程從前到後就是一個完整的大數據項目流程,一環扣一環。

比如從歷史數據的存儲,分析(HADOOP,HIVE,HBASE),到實時的數據存儲(FLUME,KAFKA),分析(STORM,SPARK),這些在真實的項目中都是相互依賴存在的。

熱點內容
驚聲尖笑5下載ftp 發布:2025-02-06 06:33:16 瀏覽:528
共享文件夾讓輸入密碼 發布:2025-02-06 06:32:28 瀏覽:970
收銀伺服器響應出錯什麼意思 發布:2025-02-06 06:24:43 瀏覽:607
sql用戶授權 發布:2025-02-06 06:24:42 瀏覽:677
蘋果手機相冊顯示正在上傳 發布:2025-02-06 06:05:43 瀏覽:542
hadoop下載文件夾 發布:2025-02-06 06:05:08 瀏覽:187
鎧最強配置是哪些 發布:2025-02-06 06:04:22 瀏覽:360
編譯器的製作環境 發布:2025-02-06 05:54:34 瀏覽:829
學車網源碼 發布:2025-02-06 05:47:40 瀏覽:386
搭建區域網影院伺服器 發布:2025-02-06 05:47:38 瀏覽:760