開啟了一個線程池ExecutorService threadService=Executors.newFixedThreadPool(3);threadService.submit(new task(Queue));threadService.submit(new task(Queue));threadService.submit(new task(Queue));線程池中放入三個相同的線程,三個線程從同一個阻塞隊列拿數據寫到文件中。線程的Run()方法,調用了一個內部方法public run(){ file=Queue.take(); //計數點1:數據取出來(取出來的數據個數) writetoFile(file); //計數點2:寫完文件的個數} private writetoFile(){ //計數點3:進入寫函數的個數}現在隊列中放1200個數據,則會發生數據 丟失的情況,因此使用下面的方式對關鍵點進行計數輸出private static int cout=0;發現計數點1與1200吻合。計數點2總比計數點3多1,則說明剩下的次數均沒有進入doSomething()函數,其中一次的數據如下:計數點1:1200 //計數點1的數據很穩定(說明:數據都從阻塞隊列中拿出來了)計數點2:1180 //計數點2,3的數據每次都有浮動,但不是1200,總有丟失的情況,說明寫函數不是每一次都執行了計數點3:1181 可是順序結構的代碼,為什么會平白無故的沒有進入函數呢,就想到了可能是線程的原因 ,還請大佬們指點一下。
Java多線程方法沒有被執行
慕工程0101907
2018-08-17 11:10:46