Java 線程 - 統(tǒng)計(jì)關(guān)鍵字幾種不同實(shí)現(xiàn)

    1. 遞歸
package thread;

import java.io.File;

public class Test_basic {

    static String path = "xxxxxxx";

    volatile static int result = 0;
    static final String key = "class";

    public static void main(String[] args) {
        
        long begin = System.currentTimeMillis();
        
        exec(new File(path));
        System.out.println(result);
        System.out.println((System.currentTimeMillis() -begin)+"mm");
        // 2767
        // 806mm
    }

    static void exec(File file) {
        System.out.println(file.getAbsolutePath());
        if (file.isFile()) {
            result += Utils.getCount(file, key);
        } else {
            for (File item : file.listFiles()) {
                exec(item);
            }
        }
    }
}

  • 2 線程池
package thread;

import java.io.File;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

public class Test_threadPool {

    static String path = "xxxxxxx";

    volatile static int result = 0;
    static final String key = "class";
    static ThreadPoolExecutor pool = (ThreadPoolExecutor) Executors.newFixedThreadPool(10);

    public static void main(String[] args) {

        long begin = System.currentTimeMillis();

        pool.submit(new ChildThread(path));
        while (pool.getActiveCount() != 0) {
            Thread.yield();
        }
        pool.shutdown();
        
        System.out.println(result);
        System.out.println(System.currentTimeMillis() - begin + "mm");
        // 2767 
        // 562mm
        
    }

    synchronized static void addCount(int num) {
        result = result + num;
    }

    static class ChildThread implements Runnable {

        private String path;

        public ChildThread() {
            super();
        }

        public ChildThread(String path) {
            super();
            this.path = path;
        }

        @Override
        public void run() {
            System.out.println(path);
            File file = new File(path);
            if (file.isFile()) {
                int count = Utils.getCount(file, key);
                addCount(count);
            } else {
                for (File item : file.listFiles()) {
                    pool.submit(new ChildThread(item.getAbsolutePath()));
                }
            }
        }

    }

}

  • 3 lambda
package thread;

import java.io.File;
import java.util.stream.Stream;

public class Test_lambda {

    static String path = "xxxxxxx";

    volatile static int result = 0;
    static final String key = "class";

    public static void main(String[] args) {

        long begin = System.currentTimeMillis();

        exec(new File(path));
        System.out.println(result);
        System.out.println((System.currentTimeMillis() - begin) + "mm");
        // 2767
        // 567mm
    }

    static void exec(File file) {
        System.out.println(file.getAbsolutePath());
        if (file.isFile()){
            int count = Utils.getCount(file, key);
            addCount(count);
        } else {
            Stream.of(file.listFiles()).parallel().forEach(i -> {
                exec(i);
            });
        }
    }

    synchronized static void addCount(int num) {
        result = result + num;
    }
}

  • 4 forkJoin
package thread;

import java.io.File;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveAction;

public class Test_forkJoin {

    static String path = "xxxxxxx";

    volatile static int result = 0;
    static final String key = "class";

    static ForkJoinPool pool = new ForkJoinPool(10);

    public static void main(String[] args) {

        long begin = System.currentTimeMillis();

        exec(new File(path));
        while(pool.getActiveThreadCount()!=0){
            Thread.yield();
        }
        
        System.out.println(result);
        System.out.println((System.currentTimeMillis() - begin) + "mm");
        // 2767
        // 601mm
    }

    static void exec(File file) {
        pool.execute(new MyThread(file, key));
    }

    synchronized static void addCount(int num) {
        result = result + num;
    }

    static class MyThread extends RecursiveAction {

        /**
         * 
         */
        private static final long serialVersionUID = 4794478361974081108L;
        File file;
        String key;

        public MyThread(File file, String key) {
            this.file = file;
            this.key = key;
        }

        @Override
        protected void compute() {
            System.out.println(file.getAbsolutePath());
            if (file.isFile()) {
                int count = Utils.getCount(file, key);
                addCount(count);
            } else {
                for (File item : file.listFiles()) {
                    new MyThread(item, key).fork();
                }
            }
        }

    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牙捉,一起剝皮案震驚了整個(gè)濱河市竹揍,隨后出現(xiàn)的幾起案子敬飒,更是在濱河造成了極大的恐慌,老刑警劉巖鬼佣,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驶拱,死亡現(xiàn)場(chǎng)離奇詭異霜浴,居然都是意外死亡晶衷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門阴孟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晌纫,“玉大人,你說我怎么就攤上這事永丝∏率” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵慕嚷,是天一觀的道長(zhǎng)哥牍。 經(jīng)常有香客問我,道長(zhǎng)喝检,這世上最難降的妖魔是什么嗅辣? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮挠说,結(jié)果婚禮上澡谭,老公的妹妹穿的比我還像新娘。我一直安慰自己损俭,他們只是感情好蛙奖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杆兵,像睡著了一般雁仲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上琐脏,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天伯顶,我揣著相機(jī)與錄音,去河邊找鬼骆膝。 笑死祭衩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阅签。 我是一名探鬼主播掐暮,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼政钟!你這毒婦竟也來了路克?” 一聲冷哼從身側(cè)響起樟结,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎精算,沒想到半個(gè)月后瓢宦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灰羽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年驮履,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片廉嚼。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡玫镐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怠噪,到底是詐尸還是另有隱情恐似,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布傍念,位于F島的核電站矫夷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏憋槐。R本人自食惡果不足惜双藕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秦陋。 院中可真熱鬧蔓彩,春花似錦、人聲如沸驳概。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顺又。三九已至更卒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稚照,已是汗流浹背蹂空。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留果录,地道東北人上枕。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像弱恒,于是被迫代替她去往敵國(guó)和親辨萍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項(xiàng)目接著寫寫一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,575評(píng)論 1 118
  • 轉(zhuǎn)自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帥199207閱讀 8,520評(píng)論 3 93
  • 下面是我自己收集整理的Java線程相關(guān)的面試題返弹,可以用它來好好準(zhǔn)備面試锈玉。 參考文檔:-《Java核心技術(shù) 卷一》-...
    阿呆變Geek閱讀 14,829評(píng)論 14 507
  • Java 多線程 線程和進(jìn)程的區(qū)別 線程和進(jìn)程的本質(zhì):由CPU進(jìn)行調(diào)度的并發(fā)式執(zhí)行任務(wù)爪飘,多個(gè)任務(wù)被快速輪換執(zhí)行,使...
    安安zoe閱讀 2,200評(píng)論 1 18
  • 昨晚清理手機(jī)儲(chǔ)存空間,不小心小手一抖椅棺,把電話號(hào)碼悉數(shù)刪除犁罩。看著空空的通訊錄土陪,恍惚得有點(diǎn)兒發(fā)懵昼汗。那可是好幾百個(gè)電話號(hào)...
    俺在紅塵閱讀 491評(píng)論 8 17