java多线程的4种实现方式

1,继承Thread类,重写run方法;

public class Thread01 extends Thread{

    public Thread01(){

    }

    public void run(){ 

        System.out.println(Thread.currentThread().getName());

    }

    public static void main(String[] args){

        Thread01 thread01 = new Thread01();

        thread01.setName("继承Thread类的线程1");

        thread01.start();     

        System.out.println(Thread.currentThread().toString()); 

    }

}

2,实现Runnable接口,重写run方法;

public class Thread02 {

    public static void main(String[] args){

        System.out.println(Thread.currentThread().getName());

        Thread t2 = new Thread(new MyThread02());

        t2.start();

    }

}

class MyThread02 implements Runnable{

    @Override

    public void run() {

        System.out.println(Thread.currentThread().getName()+"2--实现Runnable接口的线程实现方式");

    } 

}

3,实现Callable接口通过FutureTask包装器来创建Thread线程;

 创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。

创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值。

使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程。

调用 FutureTask 对象的 get() 方法来获得子线程执行结束后的返回值。

public class CallableThreadTest implements Callable<Integer> { public static void main(String[] args)

    { 

        CallableThreadTest ctt = new CallableThreadTest(); 

        FutureTask<Integer> ft = new FutureTask<>(ctt); 

        for(int i = 0;i < 100;i++) 

        { 

            System.out.println(Thread.currentThread().getName()+" 的循环变量i的值"+i); 

            if(i==20) 

            { 

                new Thread(ft,"有返回值的线程").start(); 

            } 

        } 

        try 

        { 

            System.out.println("子线程的返回值:"+ft.get()); 

        } catch (InterruptedException e) 

        { 

            e.printStackTrace(); 

        } catch (ExecutionException e) 

        { 

            e.printStackTrace(); 

        } 


    }    @Override 

    public Integer call() throws Exception 

    { 

        int i = 0; 

        for(;i<100;i++) 

        { 

            System.out.println(Thread.currentThread().getName()+" "+i); 

        } 

        return i; 

    }  }

4,通过线程池创建线程;

public class Thread04 {


    private static int POOL_NUM =10;


    public static void main(String[] args)throws InterruptedException {

        ExecutorService executorService = Executors.newFixedThreadPool(5);

        for (int i = 0; i < POOL_NUM; i++) {

            RunnableThread  runnable =new  RunnableThread ();           

            executorService.execute(runnable);

        }

        executorService.shutdown();

    }

}

class RunnableThread  implements Runnable{   

    @Override

    public void run() 

    { 

          System.out.println("4--通过线程池创建的线程:" + Thread.currentThread().getName() + " ");

    } 

}

打个广告,本人博客地址是:风吟个人博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • java实现多线程基本上有5种办法,第一继承Thread类,重写run方法;第二实现继承Runnable接口,重写...
    安徒生阅读 3,138评论 0 0
  • 7月20日知识点 今天的主要内容——线程 线程线程的基本概念线程与进程的区别线程的两种创建方式(掌握)注意线程两种...
    须臾之北阅读 14,686评论 0 4
  • JUC 原创者:文思,感谢尚硅谷,资料来源于尚硅谷 目录: 1、volatile关键字与内存可见性 2、原子变量与...
    文思li阅读 7,003评论 0 1
  • Java给多线程编程提供了内置的支持。一个多线程程序包含两个或多个能并发运行的部分。程序的每一部分都称作一个线程,...
    编程小世界阅读 2,944评论 0 1
  • Java语言提供了非常优秀的多线程支持。可以通过非常简单的方式来启动多线程 线程概述 线程和进程 进程:所有运行中...
    So_ProbuING阅读 3,663评论 0 10

友情链接更多精彩内容