java基础学习——多线程之创建任务

lycx      2022-04-21     427

关键词:

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

1.扩展Thread

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

 1 public class MyThread extends Thread {
 2     // 变量
 3     private String name = "";
4 // 构造函数 5 public MyThread() {} 6 public MyThread(String name) { 7 this.name = name; 8 }
9 // run方法中执行任务 10 @Override 11 public void run() { 12 System.out.println("这个线程的名字是" + name); 13 } 14 }

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

2.无返回值线程

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

 1 public class MyRunnable implements Runnable {
 2     // 变量
 3     private String name = "";
 4     // 构造函数
 5     public MyThread() {}
 6     public MyThread(String name) {
 7         this.name = name;
 8     }
 9     // run方法中执行任务
10     @Override
11     public void run() {
12         System.out.println("这个线程的名字是" + name);
13     }
14 }

    需要注意以下几点:

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

3.带返回值线程

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

 1 public class MyCallable implements Callable<String> {
 2     // 变量
 3     private String name = "";
 4     // 构造函数
 5     public MyCallable() { }
 6     public MyCallable(String name) {
 7         this.name = name;
 8     }
 9     // call方法中执行任务
10     @Override
11     public String call() throws Exception {
12         System.out.println(name);
13         return name;
14     }
15 }

    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基础学习java8线程

线程和进程:操作系统执行多任务,每个任务就是进程;进程执行多任务,每个任务就是线程;包含关系 。一、多线程创建和启动:1、继承Thread:重写run()方法,调用start()启动线程。publicclassThreadDemoextendsThread{   ... 查看详情

java多线程基础之任务调度

*Timer:任务调度 *schedule(TimerTasktask,Datetime); *schedule(TimerTasktask,Date *firstTime,longperiod); *TimerTask实现了Runnable接口;也是一个线程可以了解一下QUQRTZ框架 publicclassTime{ publicstaticv 查看详情

嵌入式开发基础之任务管理(线程管理)(代码片段)

嵌入式开发基础之任务管理(线程管理)引言介绍多任务系统任务什么是任务?任务状态任务优先级任务控制块任务堆栈使用方法创建和删除任务创建线程动态创建静态创建删除线程挂起和恢复线程挂起线程恢复线程... 查看详情

嵌入式开发基础之任务管理(线程管理)(代码片段)

嵌入式开发基础之任务管理(线程管理)引言介绍多任务系统任务什么是任务?任务状态任务优先级任务控制块任务堆栈使用方法创建和删除任务创建线程动态创建静态创建删除线程挂起和恢复线程挂起线程恢复线程... 查看详情

java基础学习:多线程04

java基础学习:多线程04创建线程方式1:基类继承Thread类;重写run()方法,定义线程体;主类中:创建线程对象;调用start()方法,启动线程;(线程启动并不会立即执行,由CPU调度) 案例:多线程下载图片:​/***练习thread,... 查看详情

java基础-多线程基础

并发并发在单核和多核CPU上都存在,对于单核CPU,通过轮训时间片的方式实现并发.线程线程对象利用Thread对象,有两种方式来创建并发程序:直接创建并管理线程.当程序要启动一个异步任务的时候,直接创建一个线程.将线程管理抽象... 查看详情

多线程基础学习

1)什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任... 查看详情

java多线程之线程池

1、什么是线程池?线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。2、线程池的优点使用线程池可以有效控制系统中并发线程的数量,当系统包含... 查看详情

java基础——多线程(代码片段)

文章目录1、线程、进程、多任务多任务多线程程序(进程)多进程与多线程的区别多线程解释2、线程状态1.新线程创建(new)三种创建方式:(只关注前两种)方法1方法2总结方法三(了解即可)2.线程停... 查看详情

java基础之多线程

一、线程基本知识1、线程与进程  进程:执行中的程序  线程:轻量级的进程    线程本身不能单独进行,必须放在一个进程中才能执行。2、Java的线程模型  1、新建状态    线程被创建之后便处于新建状态。... 查看详情

java多线程之基本概念

01. Java多线程系列--“基础篇”01之基本概念Java多线程学习(吐血超详细总结) 查看详情

java多线程多线程基础

1.创建线程的方法之一--继承Thread类,并实现run方法1.main函数 2.测试线程类:3.运行结果:  2.创建线程的方法之二--实现Runnable接口 查看详情

多线程java多线程学习笔记|多线程基础知识(代码片段)

Java多线程学习笔记|多线程基础知识文章目录Java多线程学习笔记|多线程基础知识一.线程与进程二.Java中创建线程1.编写继承Thread的类,重写run方法2.编写实现Runnable的类,重写run方法3.其他方式的创建三.线程的生命周期四.... 查看详情

并发编程系列之如何正确使用线程池?

...博客并发编程系列之如何正确使用线程池?在上一章节的学习中,我们掌握了线程的基本知识,接着本博客会继续学习多线程中的线程池知识1、线程是不是越多越好?在学习多线程之前,读者可能会有疑问?如果单线程跑得太... 查看详情

java并发编程系列之二线程基础

上篇文章对并发的理论基础进行了回顾,主要是为什么使用多线程、多线程会引发什么问题及引发的原因,和怎么使用Java中的多线程去解决这些问题。正所谓,知其然知其所以然,这是学习一个知识遵循的原则。推荐读者先行... 查看详情

java基础学习之-多线程学习知识点的学习

Java语言从设计之初就把多线程作为语言的核心,至少从以下几点可以看出:1.Object对象的wait和notify机制。2.Thread类在lang包中。3.synchronizedvolatile关键字。虽然多线程是Java语言本身的特性,但是线程并不是Java语言独有的东西,而是操... 查看详情

java基础之(十四)--“多线程”

菜鸟里写的暂时够用了,菜鸟不充点:如果只想重写run()方法,而不重写其他Thread方法,那么应使用Runnable接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类【java的api建议】菜鸟中只有前... 查看详情

java基础之多线程知识懂多少

线程基本创建和启动方式不考虑线程池的情况下,创建和启动线程的基本方式有如下几种1.直接newThread类或者子类,2.实现runnable接口然后传递给Thread,这种方式更加灵活3.使用lambda表达式,实际上是实现runnable另一种写... 查看详情