一下记录下线程的3中实现方式:Thread,Runnable,Callable

不需要返回值时,建议使用Runnable;有返回值时建议使用Callable

代码如下所示:

package com.four.day01;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask; /**
* 此处主要是实现线程的三种方式
* 1.继承Thread类
* 2.实现runnable接口
* 3.实现Callable接口
* @author future
*
*/
public class TestThread { class MyThread extends Thread{
public void run(){
System.out.println("运行MyThread类中的run方法,使用继承创建线程");
}
} class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("运行MyRunnable类中的run方法,使用实现Runnable接口创建线程");
} } class MyCallable implements Callable<String>{ @Override
public String call() throws Exception {
System.out.println("运行MyCallable类中的call方法,使用实现Callable接口创建线程");
return "Class_Result";
} } public static void main(String[] args) throws Exception {
/**
* 线程的启动,是通过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=new TestThread();
MyThread myThread=testThread.new MyThread();
myThread.start(); MyRunnable myRunnable=testThread.new MyRunnable();
Thread t=new Thread(myRunnable);
t.start(); MyCallable myCallable=testThread.new MyCallable();
FutureTask ftask=new FutureTask(myCallable);
Thread t2=new Thread(ftask);
t2.start();
System.out.println("Callable接口的返回值是:"+ftask.get());
} }

运行结果为:

运行MyThread类中的run方法,使用继承创建线程
运行MyRunnable类中的run方法,使用实现Runnable接口创建线程
运行MyCallable类中的call方法,使用实现Callable接口创建线程
Callable接口的返回值是:Class_Result

java中线程的三种实现方式的更多相关文章

  1. Java创建线程的三种主要方式

    Java创建线程的主要方式 一.继承Thread类创建 通过继承Thread并且重写其run(),run方法中即线程执行任务.创建后的子类通过调用 start() 方法即可执行线程方法. 通过继承Th ...

  2. java中线程的几种实现方式

    1. 继承Thread类来实现 class MyThread extends Thread{ @Override public void run() { System.out.println(&quo ...

  3. Java中Singleton的三种实现方式解析

    一.什么是Singleton? <设计模式>的作者.Eclipse和 Junit 的开发者 Erich Gamma 在它的理论体系中将 Singleton 定义为仅仅被实例化一次的类.在当 ...

  4. Java实现线程的三种方式和区别

    Java实现线程的三种方式和区别 Java实现线程的三种方式: 继承Thread 实现Runnable接口 实现Callable接口 区别: 第一种方式继承Thread就不能继承其他类了,后面两种可以 ...

  5. (转)Java结束线程的三种方法

    背景:面试过程中问到结束线程的方法和线程池shutdown shutdownnow区别以及底层的实现,当时答的并不好. Java结束线程的三种方法 线程属于一次性消耗品,在执行完run()方法之后线程 ...

  6. Java结束线程的三种方法(爱奇艺面试)

    线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的.例如在程序中使用线程进行So ...

  7. 并发编程系列小结(线程安全,synchronized,脏读,线程间的通信wait/notify,线程的三种实现方式Demo,可替代wait/notify的方法)

    线程安全: 当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法就是线程安全的) synchronized: 可以在任意对象或方法上加锁,而加锁的这段代码称为 ...

  8. java中线程分两种,守护线程和用户线程。

    java中线程分为两种类型:用户线程和守护线程. 通过Thread.setDaemon(false)设置为用户线程: 通过Thread.setDaemon(true)设置为守护线程. 如果不设置次属性 ...

  9. java中 this 的三种用法

    Java中this的三种用法 调用属性 (1)this可以调用本类中的任何成员变量 调用方法(可省略) (2)this调用本类中的成员方法(在main方法里面没有办法通过this调用) 调用构造方法 ...

随机推荐

  1. Linux下/proc目录的作用

    文章是摘抄过来,方便自己查阅! 1. /proc目录 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在 ...

  2. [dart学习]第四篇:函数和操作符(本篇未完待续)

    接着学习dart的函数和操作符. 1.函数Function dart是一种真正的面向对象的语言,通常一个函数也是Function类型的对象,这也就是说可以把函数赋值给一个变量,或者作为另一个函数的入参 ...

  3. flutter packages.

    connectivity This plugin allows Flutter apps to discover network connectivity and configure themselv ...

  4. shell实现大批量word转码然后分析相关字段

    需求 需要从服务器中的所有附件(2013-2019) 共60G查找相关字段 在linux上面直接打开doc等是乱码的 思路 先全部附件转码为txt, 然后用grep遍历查找字段实现 转码shell # ...

  5. 详解docker中容器devicemapper设备的挂载流程

    事故起因 版本说明:本文中docker版本主要基于1.10版本,操作系统为centos7.devicemapper在文中缩写为dm. 某个用户的容器启动不起来,启动时候一直报错.通过docker lo ...

  6. bzoj 3473 字符串 - 后缀数组 - 树状数组

    题目传送门 传送门 题目大意 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串 先用奇怪的字符把所有字符串连接起来. 建后缀树,数每个节点的子树内包含多少属 ...

  7. windows服务加定时器实现

    首先在项目中添加windows服务 然后双击“MainService.cs”,在上面点右键“打开代码” 以下是我的实例代码 partial class MainService : ServiceBas ...

  8. HDU 1074 Doing Homework【状压DP】

    Doing Homework Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he ...

  9. GhostCore核心使用完全指南 - 传送门

    Ghostcore,小坏制作,QQ 532073265,切记不要使用破解版本,后果自负 更新日志 数据表集合 了解模板机制 基本设置 自动备份数据库 自定义字符 扩展的GM命令 NPC脚本(包括幻化. ...

  10. ssh整合oracle数据源报错????

    在SSH整合的时候,引入oracle的pom节点,但是报错,因为没有权限,要手动将Oracle.jar注册到本地仓库 保证你电脑有maven环境,测试 方式为 cmd---->mvn -vers ...