卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

方法一:繼承Thread類創(chuàng)建線程

Java中實現(xiàn)多線程的一種方式是繼承Thread類。Thread類本質(zhì)上是實現(xiàn)了Runnable接口的一個實例,代表一個線程的實例。啟動線程的唯一方法就是通過Thread類的start()方法。 通

Java中實現(xiàn)多線程的一種方式是繼承Thread類。Thread類本質(zhì)上是實現(xiàn)了Runnable接口的一個實例,代表一個線程的實例。啟動線程的唯一方法就是通過Thread類的start()方法。

通過繼承Thread類并復(fù)寫run()方法,我們可以自定義線程內(nèi)的操作邏輯。例如:

public class MyThread extends Thread {
    public void run() {
        ("()");
    }
}
MyThread myThread1  new MyThread();
MyThread myThread2  new MyThread();
();
();

方法二:實現(xiàn)Runnable接口創(chuàng)建線程

如果自己的類已經(jīng)繼承了其他類,則無法直接繼承Thread類。此時,可以實現(xiàn)Runnable接口來創(chuàng)建線程。

public class MyThread extends OtherClass implements Runnable {
    public void run() {
        ("()");
    }
}
MyThread myThread  new MyThread();
Thread thread  new Thread(myThread);
();

方法三:實現(xiàn)Callable接口通過FutureTask包裝器來創(chuàng)建線程

如果希望線程執(zhí)行完畢后返回結(jié)果,可以使用Callable接口配合FutureTask包裝器來創(chuàng)建線程。

public class SomeCallable extends OtherClass implements Callable {
    @Override
    public V call() throws Exception {
        // TODO Auto-generated method stub
        return null;
    }
}
Callable oneCallable  new SomeCallable();
FutureTask oneTask  new FutureTask(oneCallable);
Thread oneThread  new Thread(oneTask);
();

方法四:使用ExecutorService、Callable、Future實現(xiàn)有返回結(jié)果的線程

ExecutorService、Callable、Future是JDK中實現(xiàn)多線程的一套接口,其中Callable接口用于定義有返回值的任務(wù)。通過將Callable任務(wù)提交給ExecutorService線程池,并使用Future對象獲取任務(wù)的返回結(jié)果,就可以實現(xiàn)有返回結(jié)果的多線程。

import *;
import ;
import ;
import ;
@SuppressWarnings("unchecked")
public class Test {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ("----程序開始運行----");
        Date date1  new Date();
        int taskSize  5;
        ExecutorService pool  (taskSize);
        List> list  new ArrayList>();
        for (int i  0; i < taskSize; i  ) {
            Callable c  new MyCallable(i   " ");
            Future f  (c);
            (f);
        }
        ();
        for (Future f : list) {
            (">>>>>"   ().toString());
        }
        Date date2  new Date();
        ("----程序結(jié)束運行----,程序運行時間【"  
                (() - ())   "毫秒】");
    }
}
class MyCallable implements Callable {
    private String taskNum;
    MyCallable(String taskNum) {
        this.taskNum  taskNum;
    }
    public Object call() throws Exception {
        (">>>>>"   taskNum   "任務(wù)啟動");
        Date dateTmp1  new Date();
        (1000);
        Date dateTmp2  new Date();
        long time  () - ();
        (">>>>>"   taskNum   "任務(wù)終止");
        return taskNum   "任務(wù)返回運行結(jié)果,當(dāng)前任務(wù)時間【"   time   "毫秒】";
    }
}
                    

                    
                    

                    
標簽: