java多線程的多種實現(xiàn)方式

在我們?nèi)粘i_發(fā)中,經(jīng)常會碰到以下幾種情況

1.大數(shù)據(jù)量的處理 如 數(shù)據(jù)同步,數(shù)據(jù)簡單處理,數(shù)據(jù)的檢驗等

2.某段代碼的速度慢

針對不同的情況,我們可以采取多線程的方式進行優(yōu)化,先簡單地看3種多線程的實現(xiàn)方式

1.繼承Thread實現(xiàn)多線程

1.重寫Thread的run方法

package com.wwj.test.thread;

public class MyThread extends Thread {

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }
}

2.通過start方法調(diào)用

package com.wwj.test.thread;

public class Main {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
    }
}

2.實現(xiàn)Runable接口實現(xiàn)多線程

1.實現(xiàn)Runable的run方法

package com.wwj.test.thread;

public class MyRunable implements Runnable {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    }
}

2.通過Thread.start方法啟動多線程 或者 直接是用lambda表達式

package com.wwj.test.thread;

public class Main {
    public static void main(String[] args) {
//        MyThread myThread = new MyThread();
//        myThread.start();

//        Thread myThread = new Thread(new MyRunable());
//        myThread.start();

        new Thread(() ->{
            System.out.println(Thread.currentThread().getName());
        }).start();
    }
}

3.實現(xiàn)Callable接口實現(xiàn)多線程

通過以上2種方法都可以實現(xiàn)多線程的應(yīng)用,但是都不能直接在主線程中獲取到其它線程的返回結(jié)果,因此,在一些特定的情況下我們可以采用異步編程的方式實現(xiàn)多線程

1.實現(xiàn)Callable接口

package com.wwj.test.thread;

import java.util.concurrent.Callable;

public class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        System.out.println(Thread.currentThread().getName());
        return 0;
    }
}

2.用過Thread.start啟動多線程,并拿到返回結(jié)果

package com.wwj.test.thread;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class Main {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
//        MyThread myThread = new MyThread();
//        myThread.start();

//        Thread myThread = new Thread(new MyRunable());
//        myThread.start();

//        new Thread(() ->{
//            System.out.println(Thread.currentThread().getName());
//        }).start();

        //創(chuàng)建MyCallable對象
        MyCallable myCallable = new MyCallable();
        //開始線程
        FutureTask<Integer> integerFutureTask = new FutureTask<>(myCallable);
        new Thread(integerFutureTask).start();

        int a = integerFutureTask.get();
        System.out.println(a);
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容