java中线程的三种实现方式
一下记录下线程的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中线程的三种实现方式的更多相关文章
- Java创建线程的三种主要方式
Java创建线程的主要方式 一.继承Thread类创建 通过继承Thread并且重写其run(),run方法中即线程执行任务.创建后的子类通过调用 start() 方法即可执行线程方法. 通过继承Th ...
- java中线程的几种实现方式
1. 继承Thread类来实现 class MyThread extends Thread{ @Override public void run() { System.out.println(&quo ...
- Java中Singleton的三种实现方式解析
一.什么是Singleton? <设计模式>的作者.Eclipse和 Junit 的开发者 Erich Gamma 在它的理论体系中将 Singleton 定义为仅仅被实例化一次的类.在当 ...
- Java实现线程的三种方式和区别
Java实现线程的三种方式和区别 Java实现线程的三种方式: 继承Thread 实现Runnable接口 实现Callable接口 区别: 第一种方式继承Thread就不能继承其他类了,后面两种可以 ...
- (转)Java结束线程的三种方法
背景:面试过程中问到结束线程的方法和线程池shutdown shutdownnow区别以及底层的实现,当时答的并不好. Java结束线程的三种方法 线程属于一次性消耗品,在执行完run()方法之后线程 ...
- Java结束线程的三种方法(爱奇艺面试)
线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的.例如在程序中使用线程进行So ...
- 并发编程系列小结(线程安全,synchronized,脏读,线程间的通信wait/notify,线程的三种实现方式Demo,可替代wait/notify的方法)
线程安全: 当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法就是线程安全的) synchronized: 可以在任意对象或方法上加锁,而加锁的这段代码称为 ...
- java中线程分两种,守护线程和用户线程。
java中线程分为两种类型:用户线程和守护线程. 通过Thread.setDaemon(false)设置为用户线程: 通过Thread.setDaemon(true)设置为守护线程. 如果不设置次属性 ...
- java中 this 的三种用法
Java中this的三种用法 调用属性 (1)this可以调用本类中的任何成员变量 调用方法(可省略) (2)this调用本类中的成员方法(在main方法里面没有办法通过this调用) 调用构造方法 ...
随机推荐
- Android的JSON数据解析
一. 使用原生方式解析 准备工作:准备一个布局文件,用来显示元数据与转换之后的数据 <?xml version="1.0" encoding="utf-8" ...
- Typescript日期Date如何做格式化字符串
·使用一个date-fns/format的库 安装npm i date-fns --save import format from 'date-fns/format'; const newdate = ...
- vue获取路由地址栏url里面的指定参数
this.$route.query.gid //gid是获取指定参数的名字
- windows下使用electron+sqlite3
1.前置条件 1.1:安装 python2.7.python 若是有问题,如果之前安装过多个版本,则必须 npm config set python "/path/python.exe&qu ...
- MQ(队列消息的入门)
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成,通过提供消息传递和消息排队模型,它可以在分布式环境下拓展进程间的通信,对于消息中间件,常见的角色大致也 ...
- k8s基本对象及架构
一.基本对象 pod pod是最小的部署单元,一个pod由一个或多个容器组成,pod中的容器共享存储和网络,在同一台docker主机上运行. service service是一个应用服务的抽象,定义了 ...
- 读取本地json文件,并转换为dictionary
// 读取本地JSON文件 - (NSDictionary *)readLocalFileWithName:(NSString *)name { // 获取文件路径 NSString *path = ...
- Tomcat不停机部署项目
- python数据库多字段插入
# -*- co;ding: utf-8 -*-#企业详细信息写入数据库+征信得分import pymysqlfrom impala.dbapi import connect conn = pymys ...
- WEB前端基础知识点
因为要告知浏览器的解析器用什么文档标准解析这个文档,所以在文档的开头要写上文档类型声明,H5的文档类型声明要比H4文档类型声明简洁的多.因为H5不基于SGML(标准通用标记语言),所以不需要对DTD文 ...