Java多线程的实现方式有哪些(java,开发技术)

时间:2024-05-02 08:03:08 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    Java%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%9A%84%E5%AE%9E%E7%8E%B0%E6%96%B9%E5%BC%8F%E6%9C%89%E5%93%AA%E4%BA%9B

一、前言

Java多线程实现的三种方式有继承Thread类,实现Runnable接口,使用ExectorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。

1.Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。

2.start()方法是一个native方法,它将启动一个新线程,并执行run()方法

3.这种方式实现多线程很简单,通过自己的类直接extend Thread,并重写run()方法,就可以启动新线程并执行自己定义的run()方法

启动线程:

Java程序里面对于继承永远都是存在有单继承局限的,如果自己的类已经extends另一个类,就无法直接extends Thread,Java里面又提供第二种多线程的主体定义结构形式:实现java.lang.Runnable接口

定义:

实现一个Runnable接口:

启动MyThread,首先实例化一个Thread,并传入自己的MyThread实例:

当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run()

1.从代码的结构本身来讲肯定使用Runnable是最方便的,因为其可以避免单继承的局限,同时也可以更好的进行功能的扩充

2.从结构上观察Thread与Runnable的联系

3.进行Thread启动多线程时调用的是start()方法,而后找到的是run()方法。当通过Thread类的构造方法传递了一个Runnable接口对象的时候,该接口对象将被Thread中的target的属性保存,在start()方法执行的时候会调用Thread类的run方法,而这个run()方法去调用Runnable接口子类被覆写过的run()方法。

多线程开发的本质实质上是在于多个线程可以进行统一资源的抢占,那么Thread主要描述的是线程,那么资源的描述是通过Runnable完成的。

1.ExecutorService、Callable、Future这个对象实际上都是属于Executor框架中的功能类

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

3.执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object,再结合线程池接口ExecutorService就可以实现有返回结果的多线程了

Runnable接口有一个缺点:当线程执行完毕后,我们无法获取一个返回值,所以从JDK1.5之后就提出了一个新的线程实现接口:java.util.concurrent.Callable接口

Callbale定义的时候可以设置一个泛型,此泛型的类型就是返回数据的类型

Callable接口和Runnable接口是类似的,但是需要实现的是call方法,而且从上面的代码中我们可以看到run()方法执行的任务是没有返回值的,但是call方法有返回值,可以自定义返回值的类型,这就是两个接口最大的区别

例子:

本文:Java多线程的实现方式有哪些的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:以单个数字开头的Java字符串属性值被截断怎么解决下一篇:

10 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18