真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

關(guān)于java多線程的創(chuàng)建及啟動介紹

今天小編給大家分享的是關(guān)于java多線程的創(chuàng)建及啟動介紹,很多人都不太了解,今天小編為了讓大家更加了解java多線程,所以給大家總結(jié)了以下內(nèi)容,一起往下看吧。一定會有所收獲的哦

創(chuàng)新互聯(lián)于2013年開始,先為安塞等服務(wù)建站,安塞等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為安塞企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

關(guān)于java多線程的創(chuàng)建及啟動介紹

Java中線程的創(chuàng)建常見有如三種基本形式:

一、繼承Thread類,重寫該類的run()方法

繼承Thread類,重寫該類的run()方法

public class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0 ;i < 50;i++) {
            System.out.println(Thread.currentThread().getName() + ":" + i);
        }
    }
    public static void main(String[] args) {
        for (int i = 0;i<50;i++) {
            //調(diào)用Thread類的currentThread()方法獲取當(dāng)前線程
            System.out.println(Thread.currentThread().getName() + " " + i);
            if (i == 10) {
                new MyThread().start();
                new MyThread().start(); 
            }
        }
    }
}

運(yùn)行結(jié)果:

...
main 48
main 49
Thread-0:0
Thread-0:1
Thread-0:2
Thread-0:3
Thread-0:4
Thread-1:0
...

從結(jié)果中可以看出:

1、有三個線程:main、Thread-0 、Thread-1;

2、Thread-0 、Thread-1兩個線程輸出的成員變量 i 的值不連續(xù)(這里的 i 是實例變量而不是局部變量)。因為:通過繼承Thread類實現(xiàn)多線程時,每個線程的創(chuàng)建都要創(chuàng)建不同的子類對象,導(dǎo)致Thread-0 、Thread-1兩個線程不能共享成員變量 i ;

3、線程的執(zhí)行是搶占式,并沒有說Thread-0 或者Thread-1一直占用CPU(這也與線程優(yōu)先級有關(guān),這里Thread-0 、Thread-1線程優(yōu)先級相同,關(guān)于線程優(yōu)先級的知識這里不做展開)

(學(xué)習(xí)視頻推薦:java視頻教程)

二、通過實現(xiàn)Runnable接口創(chuàng)建線程類

定義一個類實現(xiàn)Runnable接口;創(chuàng)建該類的實例對象obj;將obj作為構(gòu)造器參數(shù)傳入Thread類實例對象,這個對象才是真正的線程對象。

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        for (int i = 0 ;i < 50 ;i++) {
            System.out.println(Thread.currentThread().getName()+":" +i);
        }
    }

    public static void main(String[] args) {
       for (int i = 0;i < 50;i++) {
            System.out.println(Thread.currentThread().getName() + ":" +i);
            if (i == 10) {
                MyRunnable myRunnable = new MyRunnable();
                new Thread(myRunnable).start();
                new Thread(myRunnable).start();
            }
        }
        //java8 labdam方式
         new Thread(() -> {
            System.out.println(Thread.currentThread().getName());
        },"線程3").start();
    }
}

運(yùn)行結(jié)果:

...
main:46
main:47
main:48
main:49
Thread-0:28
Thread-0:29
Thread-0:30
Thread-1:30
...

1、線程1和線程2輸出的成員變量i是連續(xù)的,也就是說通過這種方式創(chuàng)建線程,可以使多線程共享線程類的實例變量,因為這里的多個線程都使用了同一個target實例變量。但是,當(dāng)你使用上述的代碼運(yùn)行的時候,你會發(fā)現(xiàn),其實結(jié)果有些并不連續(xù),這是因為多個線程訪問同一資源時,如果資源沒有加鎖,那么會出現(xiàn)線程安全問題;

2、java8 可以使用lambda方式創(chuàng)建多線程。

三、通過Callable和Future接口創(chuàng)建線程

創(chuàng)建Callable接口實現(xiàn)類,并實現(xiàn)call()方法,該方法將作為線程執(zhí)行體,且該方法有返回值,再創(chuàng)建Callable實現(xiàn)類的實例;使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值;使用FutureTask對象作為Thread對象的target創(chuàng)建并啟動新線程;調(diào)用FutureTask對象的get()方法來獲得子線程執(zhí)行結(jié)束后的返回值。

public class MyCallable implements Callable {
    private int i = 0;
    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + " " + i);
            sum += i;
        }
        return sum;
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 創(chuàng)建MyCallable對象
        Callable myCallable = new MyCallable();
        //使用FutureTask來包裝MyCallable對象
        FutureTask ft = new FutureTask(myCallable);
        for (int i = 0;i<50;i++) {
            System.out.println(Thread.currentThread().getName() + ":" + i);
            if (i == 30) {
                Thread thread = new Thread(ft);
                thread.start();
            }
        }
        System.out.println("主線程for循環(huán)執(zhí)行完畢..");
        Integer integer = ft.get();
        System.out.println("sum = "+ integer);
    }
}

call()方法的返回值類型與創(chuàng)建FutureTask對象時<>里的類型一致。

以上就是關(guān)于java多線程的創(chuàng)建及啟動的簡略介紹,當(dāng)然詳細(xì)使用上面的不同還得要大家自己使用過才領(lǐng)會。如果想了解更多,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道哦!


網(wǎng)頁名稱:關(guān)于java多線程的創(chuàng)建及啟動介紹
本文地址:http://weahome.cn/article/jdeods.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部