2016 - 2024

感恩一路有你

方法一:继承Thread类创建线程

浏览量:1526 时间:2024-01-13 23:48:19 作者:采采

Java中实现多线程的一种方式是继承Thread类。Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()方法。

通过继承Thread类并复写run()方法,我们可以自定义线程内的操作逻辑。例如:

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

方法二:实现Runnable接口创建线程

如果自己的类已经继承了其他类,则无法直接继承Thread类。此时,可以实现Runnable接口来创建线程。

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

方法三:实现Callable接口通过FutureTask包装器来创建线程

如果希望线程执行完毕后返回结果,可以使用Callable接口配合FutureTask包装器来创建线程。

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实现有返回结果的线程

ExecutorService、Callable、Future是JDK中实现多线程的一套接口,其中Callable接口用于定义有返回值的任务。通过将Callable任务提交给ExecutorService线程池,并使用Future对象获取任务的返回结果,就可以实现有返回结果的多线程。

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();
        ("----程序结束运行----,程序运行时间【"  
                (() - ())   "毫秒】");
    }
}
class MyCallable implements Callable {
    private String taskNum;
    MyCallable(String taskNum) {
        this.taskNum  taskNum;
    }
    public Object call() throws Exception {
        (">>>>>"   taskNum   "任务启动");
        Date dateTmp1  new Date();
        (1000);
        Date dateTmp2  new Date();
        long time  () - ();
        (">>>>>"   taskNum   "任务终止");
        return taskNum   "任务返回运行结果,当前任务时间【"   time   "毫秒】";
    }
}
          

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。