1、创建线程的四种方式

本贴最后更新于 785 天前,其中的信息可能已经时移世易

创建线程的四种方式

本质上都是实现 Runnable 接口

1、继承 Thread 类

public class TestThread extends Thread{   public static void main(String[] args) {       TestThread tt = new TestThread();       tt.start();   }   @Override   public void run() {       super.run();       System.out.println("New Thread");   } }

缺点:继承 Thread 后,无法继承其它类

2、实现 Runnable 接口

public class TestThread2 implements Runnable{   public static void main(String[] args) {       Thread thread = new Thread(new TestThread2());       thread.start();       new Thread(new Runnable(){           @Override           public void run() {               System.out.println("匿名内部类");           }       }).start();       //函数式接口->一个接口中只有一个方法,可以转换为lambda表达式(java8新特性)       new Thread(()-> System.out.println("lambda表达式")).start();   }   @Override   public void run() {       System.out.println("new thread");   } }

接口可以多继承

3、实现 Callable 接口

public class TestThread3 implements Callable<String> {   public static void main(String[] args) throws ExecutionException, InterruptedException {       FutureTask<String> ft = new FutureTask<>(new TestThread3());       Thread thread = new Thread(ft);       thread.start();       //阻塞式的获取线程执行结果       System.out.println(ft.get());   }   public String call(){       return "你好";   } }

4、线程池

public class TestThread4 implements Runnable{   public static void main(String[] args) {       ExecutorService executorService = Executors.newFixedThreadPool(10);       executorService.execute(new TestThread4());   }   @Override   public void run() {       System.out.println("你好 世界");   } }

不建议使用 Executors 创建线程池

底层是无界阻塞队列有可能造成 OOM 之外,我们使用 Executors 来创建线程池也不能自定义线程的名字,不利于排查问题,所以建议直接使用 ThreadPoolExecutor 来定义线程池,这样可以灵活控制。****

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3198 引用 • 8215 回帖
  • 并发
    75 引用 • 73 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...