Java如何处理多线程的数据同步问题 java多线程采集,多线程数据同步的问题。 怎么做同步啊。。

1\u3001java\u4e2d\u540c\u6b65\u6240\u89e3\u51b3\u7684\u95ee\u9898\u662f\u4ec0\u4e48\uff1f 2\u3001java\u4e2d\u9020\u6210\u591a\u7ebf\u7a0b\u5b89\u5168\u95ee\u9898\u7684\u539f\u56e0

\u9996\u5148\u8bf4\u660e\u4e00\u4e0b\u4ec0\u4e48\u662f\u540c\u6b65\u548c\u5f02\u6b65\u3002
java\u540c\u6b65\u65b9\u6cd5\u7b80\u5355\u7406\u89e3\u5c31\u662f\u591a\u4e2a\u4efb\u52a1\u6267\u884c\u540c\u4e00\u4e2a\u65b9\u6cd5\u6309\u987a\u5e8f\u6267\u884c\u65e2\u7b49\u5f85\u7b2c\u4e00\u6b21\u6267\u884c\u5b8c\u6210\u5728\u6267\u884c\u4e0b\u4e00\u6b21\u3002
\u5f02\u6b65\u65b9\u6cd5\u5219\u662f\u4e0d\u9700\u7b49\u5f85\u65e2\u4e0d\u7ba1\u7b2c\u4e00\u6b21\u65b9\u6cd5\u662f\u5426\u6267\u884c\u5b8c\u6210\u90fd\u4f1a\u5728\u6b64\u6267\u884c
\u540c\u6b65\u65b9\u6cd5\u6240\u89e3\u51b3\u7684\u95ee\u9898\u5c31\u662f\u6bd4\u5982\u8ba2\u7968\u7cfb\u7edf\u6bcf\u4e2a\u5ea7\u4f4d\u5c31\u4e00\u5f20\u7968\u5982\u679c\u7528\u5f02\u6b65\u65b9\u6cd5\u5c31\u6709\u53ef\u80fd\u5bfc\u81f4\u540c\u4e00\u5f20\u7968\u88ab\u591a\u4eba\u8d2d\u4e70\uff0c\u8fd9\u4e5f\u662f\u6240\u8c13\u7684\u6570\u636e\u810f\u8bfb
\u800c\u7ebf\u7a0b\u5b89\u5168\u5176\u5b9e\u4e5f\u662f\u8fd9\u4e2a\u610f\u601d\u6bd4\u5982\u6709\u4e00\u4e2alist \u9700\u8981\u6d88\u8d39list\u4e2d\u7684\u6570\u636e\u5982\u679c\u4f7f\u7528\u975e\u7ebf\u7a0b\u5b89\u5168\u65b9\u6cd5\u4e5f\u662f\u5f88\u5bb9\u6613\u5bfc\u81f4\u591a\u4e2a\u7ebf\u7a0b\u62ff\u5230\u76f8\u540c\u7684\u6570\u636e\u5bfc\u81f4\u810f\u8bfb

\u6e90\u4ee3\u7801\u5982\u4e0b\uff1a
1\u3001\u7ebf\u7a0b\u7c7b
package com.yjf.util; import java.util.Date; import java.util.List; public class GetWebThread extends Thread{ /** * \u7ebf\u7a0b */ public void run(){ try { while (true) { int day = 0; long time1 = new Date().getTime(); //\u7528\u6765\u540c\u6b65\u6293\u53d6\u7ebf\u7a0b synchronized("searchthead"){ Main.thisdaycount++; if(Main.thisdaycount>Main.daycount){ break; } System.out.println("\u5f00\u59cb\u67e5\u8be2\u7b2c"+(Main.thisdaycount)+"\u5929"); Thread.sleep(133); day = Main.thisdaycount-1; } //\u83b7\u53d6\u6293\u53d6\u7684\u65f6\u95f4 String datetext = TimeUtil.date.format(TimeUtil.addDaysForDate(day)); String[] txt =FileUtil.getCityByTxtFile(); for(int t=0;t datalist = Main.getDataList(datetext, start, end); if(datalist!=null){ Main.isadsl = 0; CheckAdsl.adsllasttime = new Date().getTime(); FileUtil.addDataToFileCsv(datalist); Main.log.printLog("===="+datetext+"="+start+"="+end+"="+t+"=\u6570\u636e\u603b\u6570\uff1a"+datalist.size()); }else{ Thread.sleep(11); AdslThead.isadsl = true; Thread.sleep(11); //\u5224\u65ad\u662f\u5426\u6b63\u5728\u62e8\u53f7 \u5e76\u6682\u505c\u7ebf\u7a0b while (AdslThead.isadsl) { Thread.sleep(5000); } t--; } } long time2 = new Date().getTime(); Main.log.printLog(datetext+"==\u67e5\u8be2\u5b8c\u6bd5=========\u8017\u65f6"+(time2-time1)); } } catch (Exception e) { Main.log.printLog(e.getMessage()); e.printStackTrace(); } } } \u7b2c\u4e8c\u6b65\uff0c \u51c6\u5907\u7ebf\u7a0b\u542f\u52a8\u3002
\u63a7\u5236\u7ebf\u7a0b\u6570\u91cf\u3002 http://www.qi788.com
\u67e5\u8be2\u6570\u636e\u603b\u5929\u6570\u3002 \u8bbe\u7f6e\u62e8\u53f7\u72b6\u6001\u7b49\u3002
2\u3001\u7ebf\u7a0b\u542f\u52a8\u7c7b\u3002 \u5305\u62ec\u542f\u52a8\uff0c\u63a7\u5236\uff0c\u505c\u6b62
package com.yjf.util; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Properties; import java.util.Timer; public class Main { private static boolean isRunGrabThread = true; //\u6293\u53d6\u7ebf\u7a0b\u662f\u5426\u6267\u884c\u5b8c\u6bd5 public static int threadCount = 3; //\u7ebf\u7a0b\u6570\u91cf public static int daycount = 30; //\u67e5\u8be2\u603b\u5929\u6570 public static int thisdaycount = 0; public static int isadsl = 0; public static int adslcount = 1; public static void main(String[] args) { try { startThead();//\u542f\u52a8\u6293\u53d6\u6570\u636e\u4e3b\u7ebf\u7a0b } catch (Exception e) { e.printStackTrace(); } } public static void startThead(){ Thread[] grabThreads= new Thread[threadCount]; try{ //\u5f00\u542f-\u6570\u636e\u6293\u53d6\u5b50\u7ebf\u7a0b for(int i=0;i<grabThreads.length;i++){ Thread searchThread=new GetWebThread(); grabThreads[i] = searchThread; grabThreads[i].setDaemon(true); grabThreads[i].start(); } isRunGrabThread = true; //\u76d1\u63a7\u5b50\u7ebf\u7a0b,\u5168\u90e8\u5b8c\u6210\u7a0b\u5e8f\u9000\u51fa
WhileLoop: while(true){ //\u62e8\u53f7\u7b56\u7565\u63a7\u5236 //reconnectControl(); //\u5224\u65ad\u5b50\u7ebf\u7a0b\u662f\u5426\u8fd0\u884c\u5b8c\u6210 for(int i=0;i<threadCount;i++){ if(grabThreads[i].isAlive()){ Thread.sleep(3*1000); continue WhileLoop; } } //\u6240\u6709\u6293\u53d6\u7ebf\u7a0b\u6267\u884c\u5b8c\u6bd5 isRunGrabThread = false; //\u5b50\u7ebf\u7a0b\u6267\u884c\u5b8c\u6bd5\u5219\u9000\u51fa break; } } catch (Exception e) { System.out.println("main\u4e3b\u7ebf\u7a0b--\u7cfb\u7edf\u5f02\u5e38!"); } } }
\u6587\u7ae0\u6765\u6e90\u6ce8\u660e\uff1a http://qi788.com/info/11.html

通过synchronize加锁进行实现进行之间的互斥、通过wait、notify方法实现线程之间的同步。

  • 绾跨▼鐨勭嚎绋嬬殑鍚屾
    绛旓細绾跨▼鐨鍚屾鏄Java澶氱嚎绋缂栫▼鐨勯毦鐐,寰寰寮鍙戣呮悶涓嶆竻妤氫粈涔堟槸绔炰簤璧勬簮銆佷粈涔堟椂鍊欓渶瑕佽冭檻鍚屾,鎬庝箞鍚屾绛夌瓑闂,褰撶劧,杩欎簺闂娌℃湁寰堟槑纭殑绛旀,浣嗘湁浜涘師鍒欓棶棰橀渶瑕佽冭檻,鏄惁鏈夌珵浜夎祫婧愯鍚屾椂鏀瑰姩鐨勯棶棰?瀵逛簬鍚屾,鍦ㄥ叿浣撶殑Java浠g爜涓渶瑕佸畬鎴愪互涓嬩袱涓搷浣:鎶婄珵浜夎闂殑璧勬簮鏍囪瘑涓簆rivate;鍚屾鍝簺淇敼鍙橀噺鐨勪唬鐮,浣跨敤synchr...
  • java澶氱嚎绋鍏卞悓鎿嶄綔鍚屼竴涓槦鍒,鎬庝箞瀹炵幇?
    绛旓細浠ヤ笅鏄袱涓绾跨▼锛歩mport java.util.*;public class Thread_List_Operation { //鍋囪鏈夎繖涔堜竴涓槦鍒 static List list = new LinkedList();public static void main(String[] args) { Thread t;t = new Thread(new T1());t.start();t = new Thread(new T2());t.start();} } //绾跨▼T1...
  • 鍦Java 涓绾跨▼鐨瀹炵幇鏂规硶鏈夊摢浜,濡備綍浣跨敤
    绛旓細Java澶氱嚎绋嬬殑鍒涘缓鍙婂惎鍔 Java涓绾跨▼鐨勫垱寤哄父瑙佹湁濡備笁绉嶅熀鏈舰寮 1.缁ф壙Thread绫,閲嶅啓璇ョ被鐨剅un()鏂规硶銆 澶嶅埗浠g爜 1 class MyThread extends Thread { 2 3 private int i = 0; 4 5 @Override 6 public void run() { 7 for (i = 0; i < 100; i++) { 8 System.out.println(Thread.currentThrea...
  • java涓庝箞鐢ㄥ涓绾跨▼鍚屾椂瀵逛竴涓枃浠惰鍙,鏈缁堝皢鏂囦欢鍐呭淇濆瓨鍒颁竴涓瓧鑺...
    绛旓細澶氱嚎绋璇诲彇鏂囦欢鍦ㄤ竴鍧楃‖鐩樹笂娌$敤锛岀摱棰堝湪纭洏I/O锛岃屼笉鍦–PU鍜屽唴瀛樸傝鍙栨枃浠舵椂锛孋PU涓嶇敤澶嶆潅鐨勮绠楀伐浣滐紝鍙槸鏁版嵁浼犺緭鑰屽凡锛屽绾跨▼鍙嶈岄犳垚纾佸ご鏉ュ洖绉诲姩锛屾晥鐜囦笉楂樸傚鏋滄槸涓ゅ潡浠ヤ笂鐨勭‖鐩橈紝鍙互鐢ㄤ笉鍚岀殑绾跨▼璁块棶涓嶅悓鐨勭‖鐩橈紝鏁堢巼姣斿崟绾跨▼瑕侀珮 鑰屼笖澶氱嚎绋嬫搷浣滃悓涓鏂囦欢闄や簡鏁堢巼杩樹細鏈夊绾跨▼闂锛屽涓嚎绋...
  • Java澶氱嚎绋鍜屽崟绾跨▼鎬庝箞閫氫織鏄撴噦鐨勭悊瑙?
    绛旓細濡侽bject绫绘彁渚涚殑wait(), notify()绛夛級鍦澶勭悊绾跨▼缁勫拰绾跨▼闂寸殑鍗忎綔涓捣鍒板叧閿綔鐢ㄣ傛荤殑鏉ヨ锛Java鐨勫绾跨▼鍜屽崟绾跨▼灏卞儚宸ュ巶涓殑涓嶅悓宸ヤ綔妯″紡锛屾棦鐙珛鍙堝崗浣滐紝涓虹▼搴忓苟鍙戞墽琛屾彁渚涗簡寮哄ぇ鐨勬敮鎸併傞氳繃鐞嗚В杩欎簺姒傚康锛屽紑鍙戣呭彲浠ユ洿濂藉湴璁捐鍜屼紭鍖栦粬浠殑骞跺彂绋嬪簭锛屾彁鍗囨晥鐜囷紝淇濊瘉鏁版嵁涓鑷存с
  • Java鏄濡備綍澶勭悊澶鏁版嵁鐨勫憿?鏈変粈涔堟妧宸у悧?
    绛旓細Java 8鐨凷tream API鐘瑰涓鎶婇攼鍒╃殑鎵嬫湳鍒锛岄氳繃閾惧紡鎿嶄綔锛屽皢鏁版嵁澶勭悊杞寲涓虹洿瑙傘佺畝娲佺殑鍑芥暟寮忕紪绋嬨傛棤璁烘槸鍗曠嚎绋嬭繕鏄苟琛屽鐞嗭紝Stream API閮借兘甯︽潵鎬ц兘涓婄殑鎻愬崌锛屽挨鍏舵槸鍦ㄥ鐞嗗ぇ閲忔暟鎹椂銆傚苟鍙戝拰骞惰澶勭悊鏄Java鐨鍙︿竴寮犲己鐗屻傞氳繃鍒╃敤澶氱嚎绋鍜岀嚎绋嬫睜锛屽彲浠ュ皢澶ф暟鎹换鍔″垎瑙o紝鍔犻熻绠楋紝鎻愬崌鏁翠綋鏁堢巼銆傚悎鐞...
  • 濡備綍蹇熸帉鎻 java 鐨勫绾跨▼?
    绛旓細Java 鐨勫绾跨▼鍙互閫氳繃浠ヤ笅鍑犵鏂瑰紡鏉ュ涔狅細1. 閫氳繃 Thread 绫诲垱寤虹嚎绋嬶紝杩欐槸鏈鍩虹鐨勬柟娉曘2. 閫氳繃 Runnable 鎺ュ彛鍒涘缓绾跨▼锛岃繖绉嶆柟寮忔洿鍔犵伒娲汇3. 閫氳繃 Callable 鍜 Future 鎺ュ彛鍒涘缓绾跨▼锛岃繖绉嶆柟寮忓彲浠ユ洿濂藉湴鎺у埗绾跨▼鐨鎵ц銆4. 閫氳繃绾跨▼姹犳潵绠$悊绾跨▼锛岃繖绉嶆柟寮忓彲浠ユ洿濂藉湴鎺у埗绾跨▼鐨勬暟閲忓拰璧勬簮鍒嗛厤銆傝繖...
  • Java澶氱嚎绋鍚屾璁捐涓娇鐢∕etux[3]
    绛旓細release锛堬級鏂规硶绠鍗曞湴閲嶇疆inuse_鏍囧織 骞堕氱煡鍏跺畠绾跨▼ attempt锛堬級鏂规硶鏄埄鐢Java鐨Object wait锛坙ong锛夎繘琛岃鏃剁殑 鐢变簬Object wait锛坙ong锛変笉鏄竴涓簿纭殑鏃堕挓 鎵浠ttempt锛坙ong锛夋柟娉曚篃鏄竴涓矖鐣ョ殑璁℃椂 娉ㄦ剰浠g爜涓綅缃紙 锛 鍦ㄨ秴鏃舵椂杩斿洖 Mutex鏄疭ync鐨勪竴涓熀鏈疄鐜 闄や簡瀹炵幇浜哠ync鎺ュ彛涓殑鏂规硶澶 骞舵病...
  • 鐢Java瀹炵幇澶氱嚎绋鏈夊摢浜涢斿緞?
    绛旓細} public void init(){ add(...);...} public void start(){ thread1 = new Thread(...);//锛堟垜灏卞啓涓涓傦級鍒涘缓1,2涓绾跨▼瀵硅薄锛屽叾浠栫殑涓嶅啓浜 thread1.start();} public void run(){...} } 鍙傝冭祫鏂欙細JAVA璇█涓庨潰鍚戝璞$▼搴忚璁★紙绗簩鐗堬級...
  • Java澶氱嚎绋璋冭瘯濡備綍瀹屾垚淇℃伅杈撳嚭澶勭悊
    绛旓細榛樿鎯呭喌涓嬶紝鍦ㄨ皟璇澶氱嚎绋绋嬪簭鏃讹紝褰撻亣鍒版柇鐐规椂(breakpoint)锛屽綋鍓嶇嚎绋嬫殏鍋滐紝鑰屽叾瀹冪嚎绋嬬户缁繍琛岋紝鏈変簺鎯呭喌涓嬶紝杩欐槸鎴戜滑涓嶆兂瑕佺湅鍒扮殑銆傛瘮濡備笅闈㈢殑渚嬪瓙锛氶櫎绗21涓嚎绋嬩互澶栵紝鍏朵綑閮芥槸Running鐘舵併備慨鏀癸細Window->Preferences->Java->Debug:鍦ㄧ孩鑹插尯鍩熷唴锛屽皢榛樿鐨凷uspend Thread 鏀逛负 Suspend VM 鍐嶈皟璇曞...
  • 扩展阅读:java线程池配置参数 ... java线程池的七个参数 ... java两个线程共享一个变量 ... java开启新线程的三种方法 ... java多线程并发处理 ... 多线程代码示例java ... java多线程共享数据 ... java线程池初始参数 ... java 多线程处理大量数据 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网