Java有几种新启线程的方式

Java天生锁多线程的。新启线程的方式只有两种,分别是继承Thread类和实现Runnable接口:

1.继承Thread类并重写run方法,然后通过start方法启动:

public class ThreadTest {
    /**
     * 继承Thread类
     */
    private static class UseThread extends Thread {
        @Override
        public void run() {
            super.run();
            System.out.println("继承Thread类");
        }
    }

    public static void main(String[] args) {

        new UseThread().start();

    }

}

2.实现Runnable接口并重写run方法,然后通过调用Thread构造方法初始化并使用start方法启动:

public class ThreadTest {
  
    /**
     * 实现Runnable接口
     */
    private static class UseRunnable implements Runnable {

        @Override
        public void run() {
            System.out.println("实现Runnable接口");
        }
    }

    public static void main(String[] args) {
        
        UseRunnable runnable = new UseRunnable();
        new Thread(runnable).start();
        
    }

}

虽然很明确的知道有两种方法,可是网络上还给出了第三种,代码如下:

public class ThreadTest {

    /**
     * 实现Callable接口,有返回值
     */
    private static class UseCallable implements Callable<String> {

        @Override
        public String call() throws Exception {
            System.out.println("实现Callable接口,有返回值");
            return "result";
        }
    }

    public static void main(String[] args) {
        UseCallable useCallable = new UseCallable();
        FutureTask task = new FutureTask(useCallable);
        new Thread(task).start();
    }

}

这所谓的第三种,其实本质上还是第二种,因为FutureTask实现了RunnableFuture接口,而RunnableFuture又继承了Runnable和Future<V>接口,所以不存在第三种情况。

发表回复

后才能评论