首頁 > 新聞中心> 廣州校區 >正文

每一個java程序員都應該具備的java編程思想

更新時間: 2019-10-29 15:04:54來源: 粵嵌教育

         java編程思想是每一個想要學習java語言或者是已經從事java語言相關工作的人都應該要具備的思想,java編程思想就是讓所有的事物在任何的時刻只能用一個執行步驟去執行任務,并發編程,程序可以并行的執行程序中的多個任務。那么每一個java程序員都應該具備的java編程思想是怎么樣的呢?下面粵嵌科技java培訓班的講師就給大家來科普下:

java

  1 、定義任務

  線程可以驅動任務,因此你需要一種描述任務的方式,這可以由Runnable接口來提供。要想定義任務,只需實現Runnable接口并編寫run()方法,使得該任務可以執行你的命令。

  當從Runnable導出一個類時,它必須具有run()方法,但是這個方法并無特殊之處——它不會產生任何內在的線程能力。要實現線程行為,你必須顯式地將一個任務附著到線程上。

  2、 使用Executor

  FixedThreadPool 與 CachedThreadPool

  FixedThreadPool, 可以一次性預先執行代價高昂的線程分配,因而也就可以限制線程的數量了。這可以節省時間,因為你不用為每個任務都固定地付出創建線程的開銷。在事件驅動的系統中,需要線程的事件處理器,通過直接從池中獲取線程,也可以如你所愿地得到服務。你不會濫用可獲得的資源,因為FixedThreadPool使用的Thread對象的數量是有界的。

  3 、從任務中產生返回值

  Runnable是執行工作的獨立任務,但是它不返回任務值。如果你希望任務在完成時能夠返回一個值,那么可以實現Callable接口而不是Runnable接口。在Java SE5中引入的Callable是一種具有類型參數的泛型,它的類型參數表示的是從方法call()(而不是run())中返回的值,并且必須使用ExecutorService.submit()方法調用它。

  4、 編碼的變體

  另一種可能會看到的慣用法是自管理的Runnable。

  這與從Thread繼承并沒有什么特別的差異,只是語法稍微晦澀一些。但是,實現接口使得你可以繼承另一個不同的類,而從Thread繼承將不行。

  5、 線程組

  線程組持有一個線程集合。線程組的價值可以引用Joshua Bloch的話來總結:“最好把線程組看成是一次不成功的嘗試,你只要忽略它就好了。”

  6 、捕獲異常

  由于線程的本質特性,使得你不能捕獲從線程中逃逸的異常。一旦異常逃出任務的run()方法,它就會向外傳播到控制臺,除非你采取特殊的步驟捕獲這種錯誤的異常。

  7、 共享受限資源

  可以把單線程程序當作在問題域求解的單一實體,每次只能做一件事情。

  8、 不正確地訪問資源

  因為canceled標志是boolean類型的,所以它是原子性的,即諸如賦值和返回值這樣的簡單操作在發生時沒有中斷的可能,因此你不會看到這個域處于在執行這些簡單操作的過程中的中間狀態。

  有一點很重要,那就是要注意到遞增程序自身也需要多個步驟,并且在遞增過程中任務可能會被純種機制掛起——也就是說,在Java中,遞增不是原子性的操作。因此,如果不保護任務,即使單一的遞增也不是安全的。

  9、線程之間的協作

  wait()與notifyAll()

  wait()使你可以等待某個條件發生變化,而改變這個條件超出了當前方法的控制能力。通常,這種條件將由另一個任務來改變。你肯定不想在你的任務測試這個條件的同時,不斷地進行空循環,這被稱為忙等待, 通常是一種不良的周期使用方式。因此wait()會在等等外部世界產生變化的時候將任務掛起,并且只有在notify()或notifyAll() 發生時,即表示發生了某些感興趣的事物,這個任務才會被喚醒并去檢查所產生的變化。因此,wait()提供了一種在任務之間對活動同步的方式。

  調用sleep()的時候鎖并沒有被 釋放,調用yield()也屬于這種情況,理解這一點很重要。

  wait(), notify()以及notifyAll()有一個比較特殊的方面,那就是這些方法是基類Object的一個部分,而不是屬于Thread的一部分。

  錯失的信號。

  notify() 與 notifyAll()

  在有關Java的線程機制的討論中,有一個令人困惑的描述: notifyAll()將喚醒“所有下在等等的任務”。這是否意味著在程序中任何地方,任何處于wait()狀態中的任務都將被任何對notifyAll()的調用喚醒呢?有示例說明情況并非如此——事實上,當notifyAll()因某個特定鎖而被調用時,只有等待這個鎖的任務才會被喚醒。

  總結

  線程的一個額外好處是它們提供了輕量級的執行上下文切換(大約100條指令),而不是重量級的進程上下文切換(要上千條指令)。因為一個給定進程內的所有線程共享相同的內存空間,輕量級的上下文切換只是改變了程序的執行序列和局部變量。進程切換(重量級的上下文切換)必須改變所有內存空間。

  以上就是粵嵌科技的小編給大家整理的關于java編程思想的內容,每一個程序員都應該要具備好的編程思想。只有你有完整的編程思想,那么在以后的工作中才不會在遇到問題的時候手忙腳亂。如果說你想要學習java語言的話,那么可以點擊我們文章下面的獲取試聽資格按鈕來獲取我們的java培訓免費課程試聽資格,來和我們的講師進行面對面的交流和溝通并更加深入的了解我們粵嵌科技。

免費預約試聽課

推薦閱讀

竞彩篮球大小分降分