列举创建线程的几种不同方法。

在Java中,主要有四种创建线程的方式:

  1. 继承Thread类:创建一个新的类作为Thread类的子类,然后重写Thread类的run()方法,将创建的线程要执行的代码放在run()方法中。然后创建子类的实例并调用其start()方法来启动线程。
class MyThread extends Thread {
    public void run(){
        // 代码
    }
}
public class Main {
    public static void main(String[] args) {
        MyThread t = new MyThread();
        t.start();
    }
}
  1. 实现Runnable接口:创建一个新的类来实现Runnable接口,然后重写Runnable接口的run()方法。然后创建Runnable子类的实例,并以此实例作为Thread的参数来创建Thread对象,该Thread对象才是真正的线程对象。
class MyRunnable implements Runnable {
    public void run(){
        // 代码
    }
}
public class Main {
    public static void main(String[] args) {
        MyRunnable r = new MyRunnable();
        Thread t = new Thread(r);
        t.start();
    }
}
  1. 实现Callable和Future接口:与Runnable相比,Callable可以有返回值,返回值通过FutureTask进行封装。
class MyCallable implements Callable<Integer> {
    public Integer call() {
        // 代码,返回值为Integer
    }
}
public class Main {
    public static void main(String[] args) throws Exception {
        MyCallable c = new MyCallable();
        FutureTask<Integer> task = new FutureTask<>(c);
        new Thread(task).start();
        Integer result = task.get(); //获取线程返回值
    }
}
  1. 使用线程池:Java 1.5开始,可以通过Executor框架在Java中创建线程池。
public class Main {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(5);
        for (int i = 0; i < 10; i++) {
            executor.execute(new Runnable() {
                public void run() {
                    // 代码
                }
            });
        }
        executor.shutdown();
    }
}

以上就是Java创建线程的四种方式,各有适用的场景和优点。

发表评论

后才能评论