浅谈new Runnable()

转自:https://blog.csdn.net/c_p_h/article/details/70473673?locationNum=1&fps=1

参考:

https://www.cnblogs.com/lanzhi/p/6467266.html //匿名内部类中关于new Runnable()的使用

http://wiki.jikexueyuan.com/project/java-concurrent/creating-and-starting-java-threads.html //如何创建并运行 java 线程

https://blog.csdn.net/weixin_35649408/article/details/51992451 //关于java中的listener回调机制,以及在Android中的使用

 

在java多线程中实现多线程的方式有两种①extends Thread ②implements Runnable。这两种情况是我们最常见的,还有一种是由第二种变形而来的直接new Runnable(){},我写这篇博客的目的是来将new Runnable(){}中的机制理一理,让读者更清晰地理解new Runnable(){},下面我就通过代码来将问题演示。

package com.cph.Thread;

public class Text2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
         Runnable runnable=new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                System.out.println("i am new Runnable(){xxx}");

            }
        };
        Thread thread=new Thread(runnable);
        thread.start();
    }

}

这段代码不会出现什么问题,控制台会输出:i am new Runnable(){xxx} 但如果java基础扎实一点的朋友,就会疑问Runnable()是接口,我们都知道java的接口是不可以实例化的,但代码中的new Runnable(){xxx}确是实例化了,为什么? 接口和抽象类不可以实例化是对的,这个是java语法规范来的,**而new Runnable(){}其实不是实例化Runnable接口来的,实际上一种内部类的一种简写** 在这里:

①首先构造了一个”implements Runnable “的无名local内部类(方法内的内部类)

②然后构造了这个无名local内部类的一个实例

③然后用Runnable来表示这个无名local内部类的type(OO多态)。 例如上面这段代码编译后你会看到其实是编译了两个类来的,如下: 

这里写图片描述

其中Text2$1就是无名local内部内类,这个也就很好地解释了为什么在main()方法中new Runnable(){xxx}里面的调用main()方法中的变量的时候要用final关键字来修饰。 上面只是借助new Runnable(){xxx}特例来说明接口在方法中new的机制,对其他接口同理可得。 

匿名内部类(Anonymous Inner Class),在创建实例的同时给出类的定义,所有这些在一个表达式中完成。
  • 30
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 新线程(new thread)是指在程序中创建一个新的执行线程,使得程序可以同时执行多个任务。而new runnable()是创建一个实现了Runnable接口的对象,用于在新线程中执行任务。通常情况下,我们会将这个对象作为参数传递给Thread类的构造方法,然后调用start()方法启动新线程。这样,新线程就可以在后台执行任务,而不会影响主线程的执行。 ### 回答2: new thread(new runnable() 是Java中创建新线程的一种方式。在Java中,线程是用来实现多线程编程的一种机制。通过创建新的线程,我们可以实现同时执行多个任务的需求。 new thread(new runnable() 中的 new runnable() 是通过实现Runnable接口来创建线程的匿名类。Runnable接口是一个函数式接口,只包含一个抽象方法run()。通过实现run()方法,我们可以定义线程要执行的具体任务。 在new thread(new runnable() 中,我们可以将具体的任务代码写在run()方法中。然后通过new thread()来创建一个新的线程,并将实现了run()方法的Runnable对象作为参数传递给该线程。接着,通过调用线程的start()方法,我们可以启动新的线程来执行任务。 使用new thread(new runnable() 创建的线程,与继承Thread类创建的线程相比,具有更好的扩展性和复用性。因为我们可以实现多个任务的共享一个Runnable对象,从而达到多个线程执行共同任务的目的。 除了使用new thread(new runnable() 方法来创建线程外,还可以使用线程池来管理线程。线程池可以有效地管理线程的生命周期,并提供了复用线程的功能,从而提高程序的性能和效率。 总结来说,new thread(new runnable() 是创建新线程的一种方式,通过实现Runnable接口并重写run()方法,可以定义线程要执行的具体任务。使用这种方式可以实现多线程编程,同时执行多个任务,提高程序的性能和效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值