Java基础学习——多线程之创建任务
这次来盘点一下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);
- }
- }
需要注意以下几点:
- Thread类其实是一个实现了Runnable接口的类,所以二者其实没什么区别。
- 虽然二者都提供了run()方法但是并不应该执行该方法,Thread类中实现了start()方法来启动,自己实现Runnable接口的类则需要手动添加该方法,或者是使用 new Thread(new MyRunnable()) 的方法执行。
- 实现Runnable接口的优势有两个,一是可以继承其他类,二是可以用lambda表达式构建匿名类简化代码。
- 之前提到线程池,可以用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基础学习——多线程之创建任务的更多相关文章
- Java基础教程——多线程:创建线程
多线程 进程 每一个应用程序在运行时,都会产生至少一个进程(process). 进程是操作系统进行"资源分配和调度"的独立单位. Windows系统的"任务管理器&quo ...
- Java基础学习——多线程之线程池
1.线程池介绍 线程池是一种线程使用模式.线程由于具有空闲(eg:等待返回值)和繁忙这种不同状态,当数量过多时其创建.销毁.调度等都会带来开销.线程池维护了多个线程,当分配可并发执行的任务时, ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- java基础学习总结——java环境变量配置(转)
只为成功找方法,不为失败找借口! 永不放弃,一切皆有可能!!! java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之 ...
- Android学习记录(5)—在java中学习多线程下载之断点续传②
在上一节中我们学习了在java中学习多线程下载的基本原理和基本用法,我们并没有讲多线程的断点续传,那么这一节我们就接着上一节来讲断点续传,断点续传的重要性不言而喻,可以不用重复下载,也可以节省时间,实 ...
- [转帖]java基础学习总结——多态(动态绑定)
https://www.cnblogs.com/xdp-gacl/p/3644035.html 多态的概念 java基础学习总结——多态(动态绑定) 一.面向对象最核心的机制——动态绑定,也叫多态
- Java基础学习(2)
Java基础学习(二) 面向对象 对象:客观存在的事物 面向对象:人具体关注的事物的某些信息 类:是模子,确定对象会拥有的特征(属性)和行为(方法) 对象的属性:对象具有的各种特征 对象的方法:对象能 ...
随机推荐
- Git远程操作详解【转】
转自:http://www.ruanyifeng.com/blog/2014/06/git_remote.html 作者: 阮一峰 日期: 2014年6月12日 Git是目前最流行的版本管理系统,学会 ...
- linux wc命令的作用。
Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数. ...
- JAVA 之 Tomcat知识框架【转】
一.Tomcat服务器(很熟悉) 1.Web开发概述 javaSE: javaEE:13种 javaME: JavaEE规范: 13种技术的总称.Servlet/Jsp JDBC JNDI JTA.. ...
- bootstrap table 双击可编辑,添加、删除行
html: <table class="table table-bordered" id="para_table"> <tr> < ...
- Spring 控制台运行及RestTemplate实现Eurka负载均衡
spring使用控制台运行方式 spring.main.web-application-type=none新老版本的配置有点差异 Maven的modules只是实现了一个顺序编译,一次多个项目一起生成 ...
- c++动态规划dp算法题
问题1:找硬币,换钱的方法 输入: penny数组代表所有货币的面值,正数不重复 aim小于等于1000,代表要找的钱 输出:换钱的方法总数 解法1:经典dp,空间复杂度O(n*aim) class ...
- socket.io插件调用的demo
1.利用socket.io插件制作一个聊天框,原理是输入对话,发送到服务,服务器在返回相应的对话,最后插入页面中,时间对话的功能,这里我是使用的node.js搭建的服务器. 附上源码 <!DOC ...
- gc 调优记录
qps 10,0000 -Xms10240m -Xmx10240m -XX:NewRatio=5 -XX:SurvivorRatio=6 2017-12-19T15:10:14.539+0800: 1 ...
- thinkphp5.1使用phpstudy隐藏index.php
apache的重写规则如下: <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine on R ...
- Web APi入门之基本操作(一)
最近学习了下WebApi,WebApi是RESTful风格,根据请求方式决定操作.以博客的形式写出来,加深印象以及方便以后查看和复习. 1.首先我们使用VS创建一个空的WebApi项目 2.新建实体以 ...