黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Java多線程的實(shí)現(xiàn)的四種方法,你都知道嗎

Java多線程的實(shí)現(xiàn)的四種方法,你都知道嗎

更新時(shí)間:2020-09-15 16:06:21 來源:動力節(jié)點(diǎn) 瀏覽1408次


Java多線程的實(shí)現(xiàn)的四種方法,你都知道嗎


1.繼承Thread類,重寫run方法(其實(shí)Thread類本身也實(shí)現(xiàn)了Runnable接口)


2.實(shí)現(xiàn)Runnable接口,重寫run方法


3.實(shí)現(xiàn)Callable接口,重寫call方法(有返回值)


4.使用線程池(有返回值)


1.繼承Thread類,重寫run方法


每次創(chuàng)建一個(gè)新的線程,都要新建一個(gè)Thread子類的對象


啟動線程,new Thread子類().start()


創(chuàng)建線程實(shí)際調(diào)用的是父類Thread空參的構(gòu)造器

public class MyThread {

    public static void main(String ards[]){
        for(int i=0;i<10;i++){
            new ExtendsThread().start();
        }
        System.out.println(Thread.currentThread().getName());
    }
    
}

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


2.實(shí)現(xiàn)Runnable接口,重寫run方法


不論創(chuàng)建多少個(gè)線程,只需要創(chuàng)建一個(gè)Runnable接口實(shí)現(xiàn)類的對象


啟動線程,new Thread(Runnable接口實(shí)現(xiàn)類的對象).start()


創(chuàng)建線程調(diào)用的是Thread類Runable類型參數(shù)的構(gòu)造器

public class MyThread {

    public static void main(String ards[]){
        Runnable implRunnable = new ImplRunnable();
        for(int i=0;i<10;i++){
            new Thread(implRunnable).start();
        }
        System.out.println(Thread.currentThread().getName());
    }
    
}

class ImplRunnable implements Runnable{
    private volatile  int i = 0;
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"--"+ i++);
        
    }
}


3.實(shí)現(xiàn)Callable接口,重寫call方法(有返回值)


自定義類實(shí)現(xiàn)Callable接口時(shí),必須指定泛型,該泛型即返回值的類型


每次創(chuàng)建一個(gè)新的線程,都要創(chuàng)建一個(gè)新的Callable接口的實(shí)現(xiàn)類、


如何啟動線程?


(1)創(chuàng)建一個(gè)Callable接口的實(shí)現(xiàn)類的對象


(2)創(chuàng)建一個(gè)FutureTask對象,傳入Callable類型的參數(shù)


public FutureTask(Callable&lt;V&gt;callable){……}


(3)調(diào)用Thread類重載的參數(shù)為Runnable的構(gòu)造器創(chuàng)建Thread對象


將FutureTask作為參數(shù)傳遞


public class FutureTask&lt;V&gt;implements RunnableFuture&lt;V&gt;


public interface RunnableFuture&lt;V&gt;extends Runnable,Future&lt;V&gt;


如何獲取返回值?


調(diào)用FutureTask類的get()方法

public class MyThread {

    public static void main(String ards[]) throws InterruptedException, ExecutionException{

        for(int i=0;i<10;i++){
            Callable<Integer> implCallable = new ImplCallable();
            FutureTask<Integer> futureTask = new FutureTask<Integer>(implCallable);
            new Thread(futureTask).start();
            System.out.println(Thread.currentThread().getName()+"----"+futureTask.get());
        }

        System.out.println(Thread.currentThread().getName());
    }
    
}

class ImplCallable implements Callable<Integer>{

    @Override
    public Integer call() throws Exception {
        int result = 0;
        for(int i=0;i<10;i++){
            result += i;
        }
        System.out.println(Thread.currentThread().getName());
        return result;
    }

}


4.線程池


Executors類


/**
 *
 * 線程池
 * 跟數(shù)據(jù)庫連接池類似
 * 避免了線程的創(chuàng)建和銷毀造成的額外開銷
 *
 * java.util.concurrent
 *
 * Executor    負(fù)責(zé)現(xiàn)成的使用和調(diào)度的根接口
 *    |--ExecutorService    線程池的主要接口
 *          |--ThreadPoolExecutor    線程池的實(shí)現(xiàn)類
 *          |--ScheduledExecutorService    接口,負(fù)責(zé)線程的調(diào)度
 *              |--ScheduledThreadPoolExecutor    (extends ThreadPoolExecutor implements ScheduledExecutorService)
 *
 *
 * Executors工具類
 * 提供了創(chuàng)建線程池的方法
 *
 */
public class ThreadPool {
    public static void main(String[] args){

        //使用Executors工具類中的方法創(chuàng)建線程池
        ExecutorService pool = Executors.newFixedThreadPool(5);

        ThreadPoolDemo demo = new ThreadPoolDemo();

        //為線程池中的線程分配任務(wù),使用submit方法,傳入的參數(shù)可以是Runnable的實(shí)現(xiàn)類,也可以是Callable的實(shí)現(xiàn)類
        for(int i=1;i<=5;i++){
            pool.submit(demo);
        }

        //關(guān)閉線程池
        //shutdown : 以一種平和的方式關(guān)閉線程池,在關(guān)閉線程池之前,會等待線程池中的所有的任務(wù)都結(jié)束,不在接受新任務(wù)
        //shutdownNow : 立即關(guān)閉線程池
        pool.shutdown();


    }
}
class ThreadPoolDemo implements Runnable{

    /**多線程的共享數(shù)據(jù)*/
    private int i = 0;

    @Override
    public void run() {
        while(i<=50){
            System.out.println(Thread.currentThread().getName()+"---"+ i++);
        }
    }
}
public class ThreadPool2 {
    
    public static void main(String args[]){
        ExecutorService executorService = Executors.newFixedThreadPool(5);
        
        for(int i=0;i<5;i++){
            Future<Integer> future = executorService.submit(new Callable<Integer>() {

                @Override
                public Integer call() throws Exception {
                    int result = 0;
                    for(int i=0;i<=10;i++){
                        result += i;
                    }
                    return result;
                }
            });
            
            try {
                System.out.println(Thread.currentThread().getName()+"--"+future.get());
            } catch (InterruptedException | ExecutionException e) {
                e.printStackTrace();
            }
        }
        
        executorService.shutdown();

    }

}


Java多線程視頻教程:http://www.ilovecolors.com.cn/javavideo/188.html


以上就是對“Java多線程的實(shí)現(xiàn)的四種方法,你都知道嗎”的介紹,希望對大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。


提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日本全黄录像视频 | 嘿嘿嘿视频在线观看网站 | 国产乡下三片在线观看64 | 亚洲欧美网 | 日韩精品中文字幕一区二区三区 | a亚洲视频| 星光影院网高清在线观看 | 国产亚洲一区在线 | 亚洲五月激情综合图片区 | 青草视频在线播放 | 中文字幕在线导航 | 在线观看啊啊啊 | 天天看天天爽天天摸天天添 | 爱呦视频在线播放网址 | 日本综合久久 | 中文字幕禁忌乱偷在线 | 免费看男女下面日出水视频 | 免费观看大片毛片 | 亚洲日本va午夜中文字幕 | 日韩一区二区视频在线观看 | 亚洲图片国产日韩欧美 | 免费h福利漫画网站在线 | 黄色成人毛片 | 天堂网久久 | 男人日批视频 | 被男人吃奶很爽的毛片两男一女 | 日韩伊人网 | 日本不卡视频网站 | 欧美中文字幕一二三四区 | 午夜性刺激免费视频观看不卡专区 | 成人性a激情免费视频 | 久久亚洲国产伦理 | 久久综合给会久久狠狠狠 | 欧美视频性| 精品一区二区三区视频 | 最新中文字幕日本 | 天天干在线观看 | 亚洲伦理精品久久 | 日韩欧美在线精品 | 日韩色天使综合色视频 | 国产精品亚洲精品日韩已满 |