傳智播客旗下品牌:|||||

全國咨詢/投訴熱線:400-618-4000

Java程序員培訓經常遇到的幾個并發問題

更新時間:2019年01月25日16時16分 來源:java培訓 瀏覽次數:

編寫優質的并發代碼是一件難度極高的事情。Java語言從首個版本開始內置了對多線程的支持,這一點在當年是非常了不起的,但是當我們對并發編程有了更深刻的認識和更多的實踐后,實現并發編程就有了更多的方案和更好的選擇。本文是對并發編程的一點總結和思考,同時也分享了Java 5以后的版本中如何編寫并發代碼的一點點經驗。Java程序員培訓經常遇到的幾個并發問題:
java程序員培訓經常遇到的幾個問題

為什么需要并發

并發其實是一種解耦合的策略,它幫助我們把做什么(目標)和什么時候做(時機)分開。這樣做可以明顯改進應用程序的吞吐量(獲得更多的CPU調度時間)和結構(程序有多個部分在協同工作)。做過Java Web開發的人都知道,Java Web中的Servlet程序在Servlet容器的支持下采用單實例多線程的工作模式,Servlet容器為你處理了并發問題。

誤解和正解

常見的對并發編程的誤解有以下這些:

并發總能改進性能(并發在CPU有很多空閑時間時能明顯改進程序的性能,但當線程數量較多的時候,線程間頻繁的調度切換反而會讓系統的性能下降) -編寫并發程序無需修改原有的設計(目的與時機的解耦往往會對系統結構產生巨大的影響) -在使用Web或EJB容器時不用關注并發問題(只有了解了容器在做什么,才能更好的使用容器)

下面的這些說法才是對并發客觀的認識:

編寫并發程序會在代碼上增加額外的開銷 -正確的并發是非常復雜的,即使對于很簡單的問題 -并發中的缺陷因為不易重現也不容易被發現 -并發往往需要對設計策略從根本上進行修改。

并發編程的原則和技巧

單一職責原則

分離并發相關代碼和其他代碼(并發相關代碼有自己的開發、修改和調優生命周期)。

限制數據作用域

兩個線程修改共享對象的同一字段時可能會相互干擾,導致不可預期的行為,解決方案之一是構造臨界區,但是必須限制臨界區的數量。

使用數據副本

數據副本是避免共享數據的好方法,復制出來的對象只是以只讀的方式對待。Java 5的java.util.concurrent包中增加一個名為CopyOnWriteArrayList的類,它是List接口的子類型,所以你可以認為它是ArrayList的線程安全的版本,它使用了寫時復制的方式創建數據副本進行操作來避免對共享數據并發訪問而引發的問題。

線程應盡可能獨立

讓線程存在于自己的世界中,不與其他線程共享數據。有過Java Web開發經驗的人都知道,Servlet就是以單實例多線程的方式工作,和每個請求相關的數據都是用Servlet子類的service方法(或者是doGet或doPost方法)的參數傳入的。只要Servlet中的代碼只使用局部變量,Servlet就不會導致同步問題。Spring MVC的控制器也是這么做的,從請求中獲得的對象都是以方法的參數傳入而不是作為類的成員,很明顯Struts 2的做法就正好相反,因此Struts 2中作為控制器的Action類都是每個請求對應一個實例。

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

uids

北京校區

    14天免費試學

    基礎班入門課程限時免費

    申請試學名額

    15天免費試學

    基礎班入門課程限時免費

    申請試學名額

    15天免費試學

    基礎班入門課程限時免費

    申請試學名額

    15天免費試學

    基礎班入門課程限時免費

    申請試學名額

    20天免費試學

    基礎班入門課程限時免費

    申請試學名額

    8天免費試學

    基礎班入門課程限時免費

    申請試學名額

    20天免費試學

    基礎班入門課程限時免費

    申請試學名額

    5天免費試學

    基礎班入門課程限時免費

    申請試學名額

    0天免費試學

    基礎班入門課程限時免費

    申請試學名額

    12天免費試學

    基礎班入門課程限時免費

    申請試學名額

    5天免費試學

    基礎班入門課程限時免費

    申請試學名額

    5天免費試學

    基礎班入門課程限時免費

    申請試學名額

    10天免費試學

    基礎班入門課程限時免費

    申請試學名額
    华夏网赚论坛官网华夏网赚论坛福缘网赚论坛网 支付宝网赚活动真实吗 百度网赚平台打字 江苏快3 正规网赚平台 网赚能赚到钱吗 网赚彩票真的能赚钱吗 网赚导师是真的假的 网赚导师是真的假的 网赚钱项目