这次来盘点一下Java中用线程执行任务的写法。

1.扩展Thread

最基本的实现方法是在创建一个继承Thread的新类,在其中覆盖run()方法执行任务。

 public class MyThread extends Thread {
// 变量
private String name = "";
// 构造函数
public MyThread() {}
public MyThread(String name) {
this.name = name;
}
// run方法中执行任务
@Override
public void run() {
System.out.println("这个线程的名字是" + name);
}
}

new一个新的线程后,使用start()方法将其变为可运行(Runnable)状态,随后会根据系统调度执行或中断。另外,正在执行的线程也处在可运行状态。

2.无返回值线程

如果执行的任务没有返回值,可以让自己的线程类实现Runnable接口。

 public class MyRunnable implements Runnable {
// 变量
private String name = "";
// 构造函数
public MyThread() {}
public MyThread(String name) {
this.name = name;
}
// run方法中执行任务
@Override
public void run() {
System.out.println("这个线程的名字是" + name);
}
}

需要注意以下几点:

  1. Thread类其实是一个实现了Runnable接口的类,所以二者其实没什么区别。
  2. 虽然二者都提供了run()方法但是并不应该执行该方法,Thread类中实现了start()方法来启动,自己实现Runnable接口的类则需要手动添加该方法,或者是使用 new Thread(new MyRunnable()) 的方法执行。
  3. 实现Runnable接口的优势有两个,一是可以继承其他类,二是可以用lambda表达式构建匿名类简化代码。
  4. 之前提到线程池,可以用execute(Runnable runnable)执行线程,所以用这种方法会好一点。

3.带返回值线程

实现Runnable接口的方法没有返回值,而且不会抛出受查异常。如果有这些需求,需要实现Callable<T>接口。

 public class MyCallable implements Callable<String> {
// 变量
private String name = "";
// 构造函数
public MyCallable() { }
public MyCallable(String name) {
this.name = name;
}
// call方法中执行任务
@Override
public String call() throws Exception {
System.out.println(name);
return name;
}
}

Callable<T>接口带有T类型的返回值,实现了该接口的类必须覆盖call()方法,这个方法可以抛出异常。

实现了Callable<T>接口的线程类需要先用 FutureTask<T> result = new FutureTask<>(new MyCallable()) 创建一个对象,用 new Thread(result).start() 执行完毕后可以用result.get()获取T类型的返回值。

在线程池中,用submit(Callable<T> callable)执行此类线程。

Java基础学习——多线程之创建任务的更多相关文章

  1. Java基础教程——多线程:创建线程

    多线程 进程 每一个应用程序在运行时,都会产生至少一个进程(process). 进程是操作系统进行"资源分配和调度"的独立单位. Windows系统的"任务管理器&quo ...

  2. Java基础学习——多线程之线程池

    1.线程池介绍     线程池是一种线程使用模式.线程由于具有空闲(eg:等待返回值)和繁忙这种不同状态,当数量过多时其创建.销毁.调度等都会带来开销.线程池维护了多个线程,当分配可并发执行的任务时, ...

  3. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  4. Java基础学习-- 继承 的简单总结

    代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...

  5. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  6. java基础学习总结——java环境变量配置(转)

    只为成功找方法,不为失败找借口! 永不放弃,一切皆有可能!!! java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之 ...

  7. Android学习记录(5)—在java中学习多线程下载之断点续传②

    在上一节中我们学习了在java中学习多线程下载的基本原理和基本用法,我们并没有讲多线程的断点续传,那么这一节我们就接着上一节来讲断点续传,断点续传的重要性不言而喻,可以不用重复下载,也可以节省时间,实 ...

  8. [转帖]java基础学习总结——多态(动态绑定)

    https://www.cnblogs.com/xdp-gacl/p/3644035.html 多态的概念 java基础学习总结——多态(动态绑定) 一.面向对象最核心的机制——动态绑定,也叫多态

  9. Java基础学习(2)

    Java基础学习(二) 面向对象 对象:客观存在的事物 面向对象:人具体关注的事物的某些信息 类:是模子,确定对象会拥有的特征(属性)和行为(方法) 对象的属性:对象具有的各种特征 对象的方法:对象能 ...

随机推荐

  1. antdVG6随记

    g6是一个很棒的可视化工具 目前支持开发者搭建属于自己的图,图分析.图应用.图编辑器 图编辑器可以支持多种图例的创建 G6 是一个简单.易用.完备的图可视化引擎,它在高定制能力的基础上,提供了一系列设 ...

  2. Jsoup爬取带登录验证码的网站

    今天学完爬虫之后想的爬一下我们学校的教务系统,可是发现登录的时候有验证码.因此研究了Jsoup爬取带验证码的网站: 大体的思路是:(需要注意的是__VIEWSTATE一直变化,所以我们每个页面都需要重 ...

  3. Android中的通信Volley

    1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...

  4. kvm 简单了解

    网络: *主机(装有ESX的PC服务器)简称host,虚拟机简称guest *Host的一个或多个网卡组成一个虚拟交换机,虚拟交换机上创建端口组label,端口组指定vlan tag,虚拟机指定网络标 ...

  5. Freemaker语法

    包含文件 <a href="${latestProduct.url}">${latestProduct.name}</a> 基本语法 ${...}:Free ...

  6. 响应式设计:根据不同设备引不同css样式

    <link rel="stylesheet" media="screen and (max-width:600px)" href="small. ...

  7. Jmeter配置元件执行顺序

    一.Jmeter组件 Sampler(采样器):真正干活的,比如http 定时器:默认为毫秒. 前置处理器和后置处理器:必须在有采样器才有效,在采样器的前后执行.作关联,拿响应中的数据使用,用得比较多 ...

  8. 使用jdk自带的工具native2ascii 转换Unicode字符和汉字

    1.控制台转换 1.1 将汉字转为Unicode: C:\Program Files\Java\jdk1.5.0_04\bin>native2ascii 测试 \u6d4b\u8bd5 1.2 ...

  9. 关于HTML&CSS的笔记

    最近在看Jon Duckett的HTML&CSS一书(http://book.douban.com/subject/6585090/),书的排版和讲解方式很不错,并且有许多其他教学材料遗漏的关 ...

  10. 寻找并输出11~999之间的回文数m

    寻找并输出11~999之间的数m,它满足m.m2和m3均为回文数. 回文:各位数字左右对称的整数. 例如:11满足上述条件 112=121,113=1331 判断一个数是否是回文数的方法:求该数的反序 ...