当前位置: 首页 > 后端技术 > Java

别再用System.currentTimeMillis来统计耗时了,太low了,试试StopWatch吧,够优雅的!

时间:2023-04-01 18:58:14 Java

澶у濂斤紝鎴戞槸浜屽摜锛佹槰澶╂湁涓悆鍙嬮棶鎴戣兘涓嶈兘缁欎粬瑙i噴涓€涓婡SpringBootApplication娉ㄨВ鏄粈涔堟剰鎬濓紝浠ュ強SpringBoot鐨勮繍琛屽師鐞嗭紝浜庢槸鎴戝氨甯︿粬鎷夊彇浜嗚繖涓敞瑙g殑婧愮爜锛屼互鍙奡pringApplication鐨勮繍琛宑lass()鏂规硶婧愮爜锛屼粬涓€涓嬪瓙灏辩湅鎳備簡銆傚埆鍛婅瘔鎴戯紝鐪嬫簮鐮佺殑杩囩▼鐪熺殑寰堟湁瓒c€傝繖涓嶏紝鎴戝彂鐜颁簡涓€涓湁瓒g殑鐐广€俻ublicConfigurableApplicationContextrun(String...args){StopWatchstopWatch=newStopWatch();stopWatch.start();......stopWatch.stop();}SpringBoot浣跨敤StopWatch鏉ョ粺璁¤€楁椂锛岃€屾甯告儏鍐典笅锛屾垜浠細浣跨敤System.currentTimeMillis()鏉ョ粺璁¤€楁椂锛屽鍚э紵缂栫▼鍠叼煇卞紑婧愰」鐩腑鏈夎繖涔堜竴娈典唬鐮侊紝鍦ㄥ鐞嗙粺涓€鏃ュ織澶勭悊鏂归潰鐨勬椂鍊欍€侤Around("webLog()")publicObjectdoAround(ProceedingJoinPointjoinPoint)throwsThrowable{longstartTime=System.currentTimeMillis();longendTime=System.currentTimeMillis();webLog.setSpendTime((int)(endTime-startTime));}鐩告瘮涔嬩笅锛屾垜浠彲浠ュ彂鐜癑DK鎻愪緵鐨凷ystem.currentTimeMillis()涓嶅Spring鎻愪緵鐨凷topWatch绠€娲佹槑浜嗐€傚挨鍏舵槸鍦ㄥ浠诲姟澶勭悊鐨勬儏鍐典笅锛孲topWatch绠€鐩村お濂界敤浜嗮煠楋紒//鍒涘缓涓€涓猄topWatch瀹炰緥StopWatchsw=newStopWatch("娌夐粯涔嬬帇绗╔");//寮€濮嬭鏃秙w.start("Task1");Thread.sleep(1000);//鍋滄璁℃椂sw.stop();System.out.printf("浠诲姟1鑰楁椂锛?d%s.\n",sw.getLastTaskTimeMillis(),"ms");sw.start("浠诲姟2");Thread.sleep(1100);sw.stop();System.out.printf("浠诲姟2鑰楁椂:%d%s.\n",sw.getLastTaskTimeMillis(),"ms");System.out.printf("浠诲姟鏁帮細%s锛屾€昏€楁椂锛?ss銆俓n",sw.getTaskCount(),sw.getTotalTimeSeconds());鐪嬶紝鏄笉鏄緢绠€鍗曪紵棣栧厛鏂板缓涓€涓猄topWatch瀵硅薄锛岀劧鍚庡紑濮嬪紑濮嬭鏃讹紝鐒跺悗鍋滄鍋滄璁℃椂锛屾渶鍚庨€氳繃sw.getLastTaskTimeMillis()鑾峰彇鏃跺樊銆傚鏋滀綘鎶婂畠鏀规垚System.currentTimeMillis()锛屼綘灏辨瀹氫簡銆傞鍏堣澹版槑鍑犱釜long绫诲瀷鐨勫眬閮ㄥ彉閲忥紝鐒跺悗绗簩涓噺绗竴涓紝绗笁涓噺绗簩涓€傚綋浣犵◢鏈夌矖蹇冩椂锛堝挨鍏舵槸CV鏂规硶锛夛紝寰堝鏄撳嚭閿欍€傞櫎浜嗘湰鍦版椂闂达紝杩樺彲浠ラ€氳繃sw.getTotalTimeSeconds()鑾峰彇鎬绘椂闂淬€備换鍔?鑰楁椂锛?002ms銆備换鍔?鑰楁椂锛?105ms銆備换鍔℃暟锛?锛屾€昏€楁椂锛?.107820109s銆傛澶栵紝StopWatch杩樻彁渚涗簡涓€涓猻w.prettyPrint()鏂规硶锛岀敤浜庢墦鍗板嚭婕備寒鐨勬牸寮忓寲缁撴灉锛歋topWatch'ThesilentkingisstupidX':runningtime=2108529351ns----------------------------------------------ns%浠诲姟鍚嶇О--------------------------------------------1004338467048%Task11104190884052%Task2鏈夎€楁椂锛屽崰鐢ㄧ櫨鍒嗘瘮锛屽拰浠诲姟鍚嶇О锛屼竴鐩簡鐒躲€傞櫎浜哠pring锛宧utool宸ュ叿搴撳拰Apache閫氱敤宸ュ叿鍖呴兘鎻愪緵浜嗚嚜宸辩殑StopWatch銆傛煡鐪媓utool宸ュ叿搴撲腑StopWatch鐨勬簮鐮侊紝鍙互鏂畾杩欎釜绫诲叾瀹炴潵鑷猄pring鐨凷topWatch.java锛岀敤娉曞畬鍏ㄤ竴鏍枫€傝繖璇存槑hutool鐨勪綔鑰呬篃瑙夊緱Spring鐨凷topWatch鍐欑殑涓嶉敊锛屽搱鍝堝搱馃榿銆備娇鐢˙eyondcompare鍚庝篃鍙互寰楀嚭缁撹锛屼袱娈典唬鐮侀櫎浜嗕竴娈典腑鏂囨敞閲婂拰涓€娈佃嫳鏂囨敞閲婂锛屽嚑涔庢槸涓€鏍风殑銆俿etKeepTaskList鏂规硶瀹屽叏涓嶅悓銆備篃灏辨槸璇达紝濡傛灉浣犵殑椤圭洰涓笉浣跨敤Spring鍏ㄥ妗讹紝鑰屽彧浣跨敤hutool宸ュ叿鍖咃紝閭d箞鍙互浣跨敤hutool鐨凷topWatch浠f浛System.currentTimeMillis()銆傞€氳繃鍒嗘瀽StopWatch鐨剆top鏂规硶婧愮爜锛歱ublicvoidstop()throwsIllegalStateException{if(null==this.currentTaskName){thrownewIllegalStateException("Can'tstopStopWatch:it'snotrunning");}finallonglastTime=System.nanoTime()-this.startTimeNanos锛泃his.totalTimeNanos+=lastTime;this.lastTaskInfo=newTaskInfo(this.currentTaskName,lastTime);if(null!=this.taskList){this.taskList.add(this.lastTaskInfo);}++this.taskCount;this.currentTaskName=null;}鍏跺疄鍙互鍙戠幇StopWatch鍐呴儴鏄€氳繃System.nanoTime()杩涜璁℃椂鐨勶紝鏈川涓婂拰System.currentTimeMillis()娌℃湁澶ぇ鍖哄埆銆俷anoTime姣攃urrentTimeMillis鐨勭矑搴︽洿缁嗭紝鍓嶈€呬互绾崇涓哄崟浣嶏紝鍚庤€呬互姣涓哄崟浣嶃€傛敞鎰忥紝涓よ€呴兘鏄痭ativemethod锛屽嵆鍙栧€肩殑绮掑害瀹為檯涓婂彇鍐充簬搴曞眰鎿嶄綔绯荤粺銆傜湅鍒拌繖閲岋紝浣犲彲鑳戒細绐佺劧鎰忚瘑鍒帮紝StopWatch鍙笉杩囨槸System.currentTimeMillis()鎶簡涓€浠跺琛o紵涓嶈繃濂囧鐨勬槸锛岃繖灞傚琛e婕備寒锛屽浼橀泤銆係topWatch鍙互璁板綍姣忎釜瀛愪换鍔$殑鍚嶇О骞朵互鏍煎紡鎵撳嵃缁撴灉锛岀壒鍒€傜敤浜庡浠诲姟缁熻銆傚綋鐒讹紝闄や簡閫夋嫨Spring鐨凷topWatch鍜宧utool锛孉pachecommons-lang3鐨凷topWatch涔熸槸涓€涓笉閿欑殑閫夋嫨锛屾洿鍔犵伒娲诲鍙樸€係topWatchsw=StopWatch.createStarted();Thread.sleep(1000);System.out.printf("鑰楁椂:%dms.\n",sw.getTime());鍙﹀涓や釜鏄€氳繃newobject鏉ュ垱寤篠topWatch锛宑ommons-lang3涔熷彲浠ラ€氳繃createStarted锛堢珛鍗冲垱寤哄苟鍚姩锛夛紝create锛堝垱寤猴級鏉ュ畬鎴愩€備篃鍙互璋冪敤suspend鏂规硶鏆傚仠璁℃椂锛宺esume鏂规硶鎭㈠璁℃椂锛宺eset閲嶆柊寮€濮嬭鏃躲€?/鏆傚仠璁℃椂sw.suspend();System.out.printf("Pausetime:%dms.\n",sw.getTime());//鎭㈠璁℃椂sw.resume();System.out.printf("鎭㈠鏃堕棿锛?dms.\n",sw.getTime());//鍋滄璁℃椂sw.stop();System.out.printf("鎬绘椂闂达細%dms.\n",sw.getTime());//閲嶇疆璁℃椂sw.reset();//寮€濮嬭鏃秙w.start();System.out.printf("閲嶇疆鑰楁椂:%dms.\n",sw.getTime());endingNothing浣挎垜鍓嶈繘鈥斺€旈櫎浜嗙洰鐨勶紝鍗充娇宀歌竟鏈夌帿鐟般€佺豢鑽拰瀹侀潤鐨勬腐婀撅紝鎴戜篃娌℃湁琚粦鍦ㄨ埞涓娿€傛湰鏂囧凡鏀跺綍鍦℅itHub涓妔tared3k+寮€婧愪笓鏍忋€奐ava 绋嬪簭鍛樿繘闃朵箣璺€嬨€傛嵁璇存瘡涓€涓紭绉€鐨凧ava绋嬪簭鍛橀兘鍠滄濂癸紝濂瑰菇榛橀瓒o紝閫氫織鏄撴噦銆傚唴瀹瑰寘鎷琂ava鍩虹銆丣ava骞跺彂缂栫▼銆丣ava铏氭嫙鏈恒€丣ava浼佷笟寮€鍙戯紙Git銆丯ginx銆丮aven銆両ntellijIDEA銆丼pring銆丼pringBoot銆丷edis銆丮ySql绛夛級銆丣ava闈㈣瘯绛夋牳蹇冪煡璇嗙偣銆傚涔燡ava锛屽彧涓哄鎵綣ava绋嬪簭鍛樼殑杩涢樁涔嬭矾馃槃銆俬ttps://github.com/itwanger/toBeBetterJavaerstar杩欎釜瀛樺偍搴撴剰鍛崇潃浣犳湁娼滃姏鎴愪负涓€鍚嶄紭绉€鐨凧ava宸ョ▼甯堛€?/p>