第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Java多線程操作集合的小問(wèn)題

Java多線程操作集合的小問(wèn)題

有只小跳蛙 2019-03-21 15:15:39
原來(lái)是把List集合用for循環(huán)操作,現(xiàn)在想用多線程來(lái)弄,想提高點(diǎn)速度。這是先做了個(gè)小例子,然后就發(fā)現(xiàn)出問(wèn)題了。停不下來(lái)。。。繼承Runnable接口的類(lèi)里的Run方法是這樣的, public void run() {        // TODO Auto-generated method stub            //            while (index <list.size()) {                list.get(index).append("namerate", list.get(index).getString("name")+list.get(index).getString("rate"));                System.out.println(Thread.currentThread().getName()+ "正在處理"+this.index++);            }    }在main方法是這樣用的 List<Document> list = poitest.getData();        MyThread myThread = new MyThread(list);                 new Thread(myThread, "1號(hào)線程").start();         new Thread(myThread, "2號(hào)線程").start();         new Thread(myThread, "3號(hào)線程").start();         new Thread(myThread, "4號(hào)線程").start();         new Thread(myThread, "5號(hào)線程").start();        while (flag) {            if (myThread.getIndex() >= list.size()) {                // System.out.println("最后"+myThread.getIndex());                flag = false;            }            // System.out.println(myThread.getIndex()>= list.size());            // System.out.println("mainflag:"+flag);        }下面的兩個(gè)無(wú)論哪個(gè)取消注釋?zhuān)寄芡V埂5亲⑨尯螅惋@示還在運(yùn)行。我用debug來(lái)看線程的話是這樣的Thread [main] (Running) Daemon Thread [cluster-ClusterId{value='58083c114d7c9d336ce66915', description='null'}-127.0.0.1:27017] (Running) Daemon Thread [pool-2-thread-1] (Running)不知道為啥會(huì)這樣,我加斷點(diǎn)用F5執(zhí)行完卻也能結(jié)束。。。其實(shí)就是想用多線程來(lái)處理集合,處理完后再返回,所以我得在main里面判斷多線程是否結(jié)束,然后才能執(zhí)行后面的??蛇@個(gè)問(wèn)題很是詫異啊。我也是菜鳥(niǎo),看網(wǎng)上都說(shuō)用線程池什么的,但我想解決我這個(gè)問(wèn)題。之后再有什么鎖的問(wèn)題到時(shí)再看。。。
查看完整描述

5 回答

?
HUX布斯

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊

ExecutorService exec = Executors.newFixedThreadPool(8);

for(final Object obj : list){

    exec.execute(new Runnable() {

        @Override

        public void run() {

            process(obj)

        }

    });

}


我覺(jué)得使用這種方式更好。


查看完整回答
反對(duì) 回復(fù) 2019-04-25
?
皈依舞

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊

java8 parallel stream


查看完整回答
反對(duì) 回復(fù) 2019-04-25
?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊

你這個(gè)run()里面最好采用線程同步


查看完整回答
反對(duì) 回復(fù) 2019-04-25
?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

建議給每個(gè)線程限定處理集合的索引范圍,即分片。
比如: 
一共有5個(gè)線程,線程1處理前1/5,線程2處理1/5~2/5...
換成直觀理解就是,假設(shè)有100個(gè)元素,線程1的索引范圍為0~19,線程2的索引范圍為20~39...

這樣能避免線程之間操作相同數(shù)據(jù),避免了可能的線程不安全問(wèn)題。


查看完整回答
反對(duì) 回復(fù) 2019-04-25
  • 5 回答
  • 0 關(guān)注
  • 609 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)