java為什么難學(xué)?我覺(jué)得JAVA的難度,在于它的廣度!

都知道JAVA入門很容易,學(xué)點(diǎn)基本類型,基本運(yùn)算,面向?qū)ο笏枷?,IO,就可以開(kāi)發(fā)大多數(shù)的JAVA程序了!

那為什么難呢?以多線程為例,最簡(jiǎn)單的實(shí)現(xiàn)一個(gè)Thread或者實(shí)Runnble接口就可以實(shí)現(xiàn)了多線程了,但是怕你亂用線程導(dǎo)致性能問(wèn)題呀,就給你整了個(gè)線程池,以實(shí)現(xiàn)線程復(fù)用,但是線程池創(chuàng)建又有單例型的,動(dòng)態(tài)型的,周期性執(zhí)行任務(wù)型的好幾種!

而且用了多線程之后,因?yàn)榫€程共享資源會(huì)有線程安全問(wèn)題吧?怎么辦?加鎖唄,synchonized加鎖,鎖方法,鎖對(duì)象,鎖代碼段,鎖就鎖了還非得說(shuō)性能不好,搞一個(gè)CAS,AQS實(shí)現(xiàn)reentrantLock!

這時(shí)候傲嬌的人來(lái)了說(shuō)不想加鎖,咋辦呢?ThreadLocal,給你每個(gè)線程一份變量行了吧?這樣數(shù)據(jù)不會(huì)相互影響!使用BlockingQueue一個(gè)一個(gè)處理總行了吧!

還有多線程中的CountDownBatch,valetile,并行計(jì)算有FutrueTask,F(xiàn)orkjoin哪一個(gè)詞匯都不是省油的燈!

上面談到的多線程只是J.U.C包下的冰山一角,而多線程這也只是JAVA下的冰山一角!

而且JAVA開(kāi)發(fā)最難的不止是JAVA語(yǔ)言,而是JAVA生態(tài),搞JAVA的都知道下面這些:

搜索引擎有l(wèi)ucence,solr,elasticSearch!

數(shù)據(jù)庫(kù)方面有hibernate,mybatis,mycat,druid,canel!

java為什么難學(xué)

緩存有redis,memcache,ehcache!

消息中間件有redis,activeMq,RabbitMq,ons!

往往你在一家公司用了一個(gè)框架,去另一家就要用新的,最后變成你什么都要會(huì),什么都得學(xué)!

java為什么難學(xué)

所以如果再有人問(wèn)你JAVA為什么難學(xué)?你可以自豪的說(shuō),我學(xué)的不止是JAVA,是整個(gè)生態(tài)!