聊聊几种创建多线程的方法

在这篇文章中,博主来说说博主了解到的几种创建多线程的方法

1,直接继承Thread方法,来创建多线程:

这种方法是最先接触到多线程所了解到的方法,当需要一个类需要创建多线程的时候让这个类继承Thread,重写其中的run()方法
第一步,继承Thread类,重写run方法:

class MyThread  extends Thread{
   @Override
   public void run() {
       for (int i = 0; i <100 ; i++) {
           System.out.println("支线程-------》"+i);
       }
   }
}  

第二步,创建一个多线程对象:

       //新键一个支线程对象
        MyThread mt=new MyThread();

第三步,调用start()方法,启动线程:

        //开启新线程,会自动调用MyThread的run方法
        mt.start();
2,实现Runnable接口

我们可以看看文档中,这是Thread类中的几个构造方法,可以发现可以传Rannable类型的参数来形成一个新的线程

我们可以看到需要传一个Runnable类型的参数,但是Runnable接口不能直接new对象,我们可以通过其他方式来实现。
第一种是创建一个类,来实现Runnable接口,这个类就可以创建对象,并传入Thread的构造方法
第二种是用匿名内部类来实现:

lic static void main(String[] args) {
        //匿名内部类实现Runnable接口
        Thread th=new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i <100 ; i++) {
                    System.out.println("冲冲冲"+i);
                }
            }
        });

那么上面两种创建多线程的方法,我们到底用哪种比较好呢,答案是推荐用实现Runnable接口来创建多线程。其原因主要是,我们都知道类只能单继承,而接口可以多实现,当我们继承Thread类的时候就不能继承其他的类了,而实现接口就没有这种困扰

3,实现Callable接口(jdk8新特性)

这个方法听起来和第二种很像,其实是有点差别的:
首先,Callable接口种需要实现的不是run()方法,而是call()方法,
而且,这个接口可以抛出异常
最后,上面两种方法是没有返回值的,而这种方法是可以有返回值的。
所以当我们需要多线程需要返回某值的时候,我们可以使用Callable接口这个方法

   //创建一个未来类对象
     //可以查看这个FutureTask构造方法有两种,一种参数传Runnable接口,一种传参Callable,第二种有返回值
     FutureTask ft=new FutureTask(new Callable() {
         @Override

         //这里call方法可以看作run方法
         public Object call() throws Exception {
             System.out.println("begin");
             int a=2,b=3;
             Thread.sleep(10000);
             System.out.println("over");
             //自动装箱
             return a+b;
         }
     });

     //创建多线程
     Thread t=new Thread(ft);
     //启动多线程
     t.start();
4,使用线程池来创建多线程

线程是一种稀有资源,每个工作的线程都要抢夺CPU时间片,所以当线程创建多了后就会就会造成内存溢出,所以这时候就需要用到线程池的技术了。
总体来说线程池有很大的优势:
1,降低资源消耗
它可以重复利用已创建的线程来降低不必要的消耗
2,增强运行的速率
当任务到达时,不需要等线程创建就可以执行
3,增强线程的管理性
线程池可以统一的分配线程,选择和调用
博主对线程池还没过多的了解,其他关于多线程的内容以后补上
如有错误请指出,谢谢

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值