动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

细分java多线程实现的方式

06-16 22:22 450浏览
举报 T字号
  • 大字
  • 中字
  • 小字

多线程(multithreading)是指从软件或者硬件上实现多个线程并发执行的技术Java多线程实现的方式形式上主要有两种,一种是继承Thread类,一种是实现Runnable接口。但从本质上来说,实现方式都是来实现线程任务,然后启动线程执行线程任务(这里的线程任务实际上就是run方法)。

第一种Java多线程实现方式:继承Thread类

万物皆可为对象,那么线程也是对象,对象就应该能够抽取其公共特性封装成为类,使用类可以实例化多个对象,这些都是基本的java基础知识。以此类推,那么实现线程的第一种方式就是继承Thread类。继承Thread类是最简单的一种实现线程的方式,通过JDK提供的Thread类,重写Thread类的run方法即可,那么当线程启动的时候,就会执行run方法体的内容。

第二种方式:实现Runnable接口,重写run方法。

使用接口的方式可以让我们的程序降低耦合度,实现Runnable接口的实现类的实例对象作为Thread构造函数的target。Runnable接口中仅仅定义了一个方法,就是run。我们来看一下Runnable接口的代码。

不难看出Runnable就是一个线程任务,线程任务和线程的控制分离,这也就是上面所说的解耦。我们要实现一个线程,可以借助Thread类,Thread类要执行的任务就可以由实现了Runnable接口的类来处理。这也是 Runnable的精髓和独到之处。

第三种方式:定时器

定时器可以看成是一种基于线程的一个工具类,可以定时的来执行某个任务。在应用中经常需要定期执行一些操作,比如每个整点都要报出是具体的时间,每天都要上传当日的数据情况等等,总之计时器无处不在。

第四种方式:使用内部类。

这并不是一种新的实现线程的方式,只是另外的一种写法。比如有些情况我们的线程就想执行一次,以后就用不到了。那么像上面两种方式(继承Thread类和实现Runnable接口)都还要再定义一个类,显得比较麻烦,我们就可以通过匿名内部类的方式来实现。使用内部类实现依然有两种,分别是继承Thread类和实现Runnable接口。

第五种方式:基于线程池的方式

我们知道,线程和数据库连接这些资源都是非常宝贵的资源。那么每次需要的时候创建,不需要的时候销毁,是非常浪费资源的。那么我们就可以使用缓存的策略,也就是使用线程池。当然了,线程池也不需要我们来实现,jdk的官方也给我们提供了API。

第六种方式:带返回值的线程实现方式

我们发现上面提到的不管是继承Thread类还是实现Runnable接口,发现有两个问题,第一个是无法抛出更多的异常,第二个是线程执行完毕之后并无法获得线程的返回值。那么下面的这种实现方式就可以完成我们的需求。这种方式的实现就是我们后面要详细介绍的Future模式,只是在jdk5的时候,官方给我们提供了可用的API,我们可以直接使用。但是使用这种方式创建线程比上面两种方式要复杂一些,步骤如下。

1.创建一个类实现Callable接口,实现call方法。这个接口类似于Runnable接口,但比Runnable接口更加强大,增加了异常和返回值。

2.创建一个FutureTask,指定Callable对象,做为线程任务。

3.创建线程,指定线程任务。

4.启动线程

看完了这么多的Java多线程实现的方式,相信你已经情不自禁得想要尝试了。只要你能完全吃透这里面的知识和技巧,以后遇到Java多线程实现的问题一定能迎刃而解的。

0人推荐
共同学习,写下你的评论
0条评论
在天边
程序员在天边

3篇文章贡献8506字

作者相关文章更多>

推荐相关文章更多>

支付接口的幂等性设计

军哥08-05 15:18

一文梳理REST API的设计原则

军哥09-01 10:54

如何在Linux系统下开发java程序

jessy06-15 17:31

彻底解决java JDK注册表残留问题

天天天天天歌06-15 17:38

浅谈Java设计模式-之-适配器模式

调技师傅09-01 16:47

发评论

举报

0/150

取消