packagecom.four.day01;importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.FutureTask;/*** 此处主要是实现线程的三种方式

* 1.继承Thread类

* 2.实现runnable接口

* 3.实现Callable接口

*@authorfuture

**/

public classTestThread {class MyThread extendsThread{public voidrun(){

System.out.println("运行MyThread类中的run方法,使用继承创建线程");

}

}class MyRunnable implementsRunnable{

@Overridepublic voidrun() {

System.out.println("运行MyRunnable类中的run方法,使用实现Runnable接口创建线程");

}

}class MyCallable implements Callable{

@Overridepublic String call() throwsException {

System.out.println("运行MyCallable类中的call方法,使用实现Callable接口创建线程");return "Class_Result";

}

}public static void main(String[] args) throwsException {/*** 线程的启动,是通过Thread类中的start()方法进行启动的

* 1.直接继承Thread时,直接实例化,调用实例中的start方法即可

* 2.实现Runnable接口的,需要把Runnable实例化对象放到Thread的构造方法中进行初始化

* 此线程运行后,没有返回结果,其运行的run方法是返回void类型的

* 3.实现Callable接口的,需要把Callable接口包装一下,最终可以放到Thread中进行运行线程

* 故通过FutureTask对Callable实例化对象进行包装,然后作为Thread的构造参数,

* 使用Thread类中的start方法进行启动

*

* 以上3者的区别

* Thread有单继承的局限性,若一个类继承线程Thread就不能继承其他类

* Runnable是接口,可以多实现,解决了单继承的问题,不过没有返回值

* Callable也是接口,不过线程运行完后会有返回值,是泛型的,可以自己指定

* 程序中的实例是String类型的

*

* 整体程序中,通过内部类进行实现的,在实例化内部类时,必须先实例化外部类(因为没有使用static修饰)*/TestThread testThread=newTestThread();

MyThread myThread=testThread.newMyThread();

myThread.start();

MyRunnable myRunnable=testThread.newMyRunnable();

Thread t=newThread(myRunnable);

t.start();

MyCallable myCallable=testThread.newMyCallable();

FutureTask ftask=newFutureTask(myCallable);

Thread t2=newThread(ftask);

t2.start();

System.out.println("Callable接口的返回值是:"+ftask.get());

}

}

java如何实现线程_java中线程的三种实现方式相关推荐

  1. java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...

    java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...

  2. java中map的遍历方法_Java中Map的三种遍历方式

    集合中的三种遍历方式,如下代码: import java.util.Collection; import java.util.HashMap; import java.util.Iterator; i ...

  3. JAVA 通过value获取Map中key的三种方法

    JAVA 通过value获取Map中key的三种方法 简介 方法描述 循环法 Stream方法 Apache Commons Collections的BidiMap 总结 简介 我们都知道Map是存放 ...

  4. java定时执行某个方法_Java中定时执行任务的三种方法

    Java中定时执行任务的三种方法 1)java.util.Timer 这个方法应该是最常用的,不过这个方法需要手工启动你的任务: Timer timer=new Timer(); timer.sche ...

  5. verilog中状态机的三种编码方式的比较(二进制码、独热码、格雷码)

    最近做了一个小项目,是关于状态机中三种编码方式的比较,总结了一下三种编码方式的不同,可以会在以后IC笔试面试过程中用到,简单记录一下三种编码方式的优缺点. 三种编码方式如下图所示:其中独热码只有一位为 ...

  6. selenium中三大切换 三种等待方式

    前言 ui自动化测试,就是通过代码模拟手工操作,通过点击.拖拽.输入等方式,进行浏览器页面的操作,我们常用的web自动化测试工具,是selenium:同时在我们日常操作中,由于需要创建链接,加载页面, ...

  7. java三态_Java中对象的三种状态

    Java中的对象的三种状态是和垃圾回收紧密相关的,因此有必要深究. 状态一:可触及态:从根节点开始,可以搜索到这个对象,也就是可以访问到这个对象,也有人将其称为可达状态. 状态二:可复活态:从根节点开 ...

  8. java求最值_java中六种求最值的方式

    第一种:通过 Collections 求最值 import java.util.Arrays; import java.util.Collections; public class Demo { pu ...

  9. java匿名内部类_java中匿名内部类的两种实现方式

    使用匿名内部类课使代码更加简洁.紧凑,模块化程度更高.内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到.然而这个不是我说的重点,我说的很简单,就是匿名内部类的两种实现方式 ...

最新文章

  1. VMware安装CentOS6.8详细教程
  2. 引进研究生:​50万房补+年薪13万起;本科生30万房补​
  3. HTML5做手机站页面字体显示很小的解决方法
  4. python自己创建模块_创建并发布自己的python模块
  5. 汇编语言——输入两位数比较大小
  6. linux(八)__yum工具
  7. 因为权限缺乏导致SAP CRM AET字段删除失败
  8. scala学习---2
  9. 后端:C#操作Mongodb用法笔记
  10. Hadoop解决内存受限问题
  11. 海兰一体计算机参数,海兰幽灵X7电竞一体机怎么样-海兰幽灵X7电竞一体机评测...
  12. idea中刷新项目快捷键_IntelliJ Idea 常用快捷键列表
  13. 最新全套码支付源码/QQ+微信+支付宝三网免挂支付系统源码
  14. MSP430单片机学习视频
  15. TFS2010新建项目失败
  16. dell R720 单盘raid0配置
  17. 【Python】完美解决Pycharm网站无法访问问题
  18. UT 项目启动报错解决方法
  19. 手把手教学安装pycharm(社区版)
  20. java解决异常_聊聊Java中的异常及处理

热门文章

  1. PowerJob 应对庞大任务的锦囊妙计:MapReduce
  2. “Talk is cheap, show me the code”你一行代码有多少漏洞?
  3. 前方高能!IT 程序员、软件工程师值得考的证书原来有这么多! | 原力计划
  4. 面试妥了!2020 爬虫面试题目合集
  5. 400本以上电子书、1000门以上课程会员免费看,快来领取!
  6. 这类程序员成为百度、阿里宠儿,分分钟秒杀众应届毕业生
  7. 吴恩达 Drive.ai 因经营困难“卖身”苹果
  8. 37 岁学编程,发现第一个 Bug,创造商业编程语言 | 人物志
  9. Windows 3.1 往事:历史上第一个真正占据主导地位的操作系统
  10. Google 又又又要“重回中国”了?