「匿名线程java」匿名内部类创建线程

博主:adminadmin 2022-11-24 05:45:08 76

本篇文章给大家谈谈匿名线程java,以及匿名内部类创建线程对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

关于Java匿名内部类线程安全问题?

不需要在主类中设置锁,匿名内部类是在调用的时候只执行一次,但匿名内部类要访问类当中的数据,该数据必须为final。

Java匿名内部类怎样创建?有何作用和优点?创建线程怎样使用匿名内部类?

1、匿名内部类就是没有名字的内部类。这是Java为了方便我们编写程序而设计的一个机制。因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适,而且也免去了给它取名字的烦恼。\x0d\x0a\x0d\x0a2、如果满足下面的一些条件,使用匿名内部类是比较合适的: \x0d\x0a·只用到类的一个实例。 \x0d\x0a·类在定义后马上用到。 \x0d\x0a·类非常小(SUN推荐是在4行代码以下) \x0d\x0a·给类命名并不会导致你的代码更容易被理解。 \x0d\x0a在使用匿名内部类时,要记住以下几个原则: \x0d\x0a·匿名内部类不能有构造方法。 \x0d\x0a·匿名内部类不能定义任何静态成员、方法和类。 \x0d\x0a·匿名内部类不能是public,protected,private,static。 \x0d\x0a·只能创建匿名内部类的一个实例。 \x0d\x0a·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。 \x0d\x0a·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。 \x0d\x0a\x0d\x0a3、用匿名内部类创建多线程有两种方式,和创建一个线程是一样的。\x0d\x0a第①种继承Thread:\x0d\x0anew Thread(){\x0d\x0apublic void run(){\x0d\x0a//do something\x0d\x0a};\x0d\x0a}.start();\x0d\x0a\x0d\x0a第②种实现 Runnable接口:\x0d\x0anew Thread(new Runnable() {\x0d\x0apublic void run() {\x0d\x0a //do something\x0d\x0a};\x0d\x0a}) { }.start();

java怎么实现线程

1、继承Thread类创建线程

Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。

2、实现Runnable接口创建线程

如果自己的类已经extends另一个类,就无法直接extends Thread,此时,可以实现一个Runnable接口。

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

4、使用ExecutorService、Callable、Future实现有返回结果的线程

ExecutorService、Callable、Future三个接口实际上都是属于Executor框架。返回结果的线程是在JDK1.5中引入的新特征,有了这种特征就不需要再为了得到返回值而大费周折了。而且自己实现了也可能漏洞百出。

可返回值的任务必须实现Callable接口。类似的,无返回值的任务必须实现Runnable接口。

执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了。

注意:get方法是阻塞的,即:线程无返回结果,get方法会一直等待。

再结合线程池接口ExecutorService就可以实现传说中有返回结果的多线程了。

Java匿名内部类怎样创建,有何作用和优点,创建线程怎样使用匿名内部类

1、匿名内部类就是没有名字的内部类。这是Java为了方便我们编写程序而设计的一个机制。因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适,而且也免去了给它取名字的烦恼。

2、如果满足下面的一些条件,使用匿名内部类是比较合适的:

·只用到类的一个实例。

·类在定义后马上用到。

·类非常小(SUN推荐是在4行代码以下)

·给类命名并不会导致你的代码更容易被理解。

在使用匿名内部类时,要记住以下几个原则:

·匿名内部类不能有构造方法。

·匿名内部类不能定义任何静态成员、方法和类。

·匿名内部类不能是public,protected,private,static。

·只能创建匿名内部类的一个实例。

·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

3、用匿名内部类创建多线程有两种方式,和创建一个线程是一样的。

第①种继承Thread:

new

Thread(){

public

void

run(){

//do

something

};

}.start();

第②种实现

Runnable接口:

new

Thread(new

Runnable()

{

public

void

run()

{

//do

something

};

})

{

}.start();

请教一个“java多线程runnable匿名传入线程的问题”

一点一点分析:

把代码拆成4部分,

1.  new Thread()声明一个对象,这里用了匿名类的方式,后面有具体实现

2 声明匿名类实现

{

    public void run(){

        System.out.println("subthread run");

    }

}

3 然后看这匿名对象的构造参数,

new Runnable(){ //匿名

    public void run(){

        System.out.println("runnable run");

    }

}

4 已经拿到了匿名Thread的引用,调用start()方法

实际上就是一个匿名对象Thread,传入了一个匿名对象Runnable作为构造参数。

对比一下正常的线程创建方式:

 第一种:   class test implements Runnable(){

        @override

        public void run(){

            ...

        }

    }

    ...main(){

        Thread thread = new Thread(new test());

        thread.start();

    }

 第二种:再看用Thread的方式

     class test2 extends Thread(){

         @override

         public void run(){

             ....

         }

     }

也就是说:

你贴的代码就是第一种方式,只不过用了匿名的方式,

然后创建thread对象的时候

如果构造方法传入了runable、callable接口的参数,那就运行传入的参数

而不再运行自己的run方法。

关于匿名线程java和匿名内部类创建线程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-24,除非注明,否则均为首码项目网原创文章,转载请注明出处。