java多线程的创建

沐雨橙风~~      2022-05-18     191

关键词:

  • 前言:

    虽然java的API中说创建多线程的方式只有两种(There are two ways to create a new thread of execution),分别是继承Thread类创建和实现Runnable接口创建,在上一篇博文中演示了这两种,详见,但是JDK5.0以后新增了两种,分别是实现Callable接口创建和使用线程池创建,本次就演示后两种创建方式并分析其特性。


  • 实现Runnable接口创建多线程

    创建步骤:

    1.创建一个实现Callable接口的类。

    2.重写call()方法,线程需要执行的代码都放到call方法中。

    3.创建实现Callable接口类的实例对象。

    4.将步骤 3 的对象作为参数传给FutureTask构造器中,创建FutureTask对象。

    5.将FutureTask的对象作为参数传给Thread类,创建对象并调用start()方法。

package day02;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

//创建一个多线程,输出20以内的偶数,并返回所有偶数的和
//1.创建一个实现`Callable`接口的类。  
class TestSum implements Callable{
   //2.重写call()方法,线程需要执行的代码都放到call方法中。
    @Override
    public Object call() throws Exception{
        int sum = 0;
        for(int i = 1;i <= 20 ;i++ ){
            if(i % 2 == 0){
                System.out.println(i);
                sum = sum + i;
            }
        }
        return sum;
    }
}

public class ThreadCall {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //3.创建实现`Callable`接口类的实例对象。
        TestSum test = new TestSum();
        //4.将步骤 3 的对象作为参数传给`FutureTask`构造器中,创建`FutureTask`对象。
        FutureTask futuretask = new FutureTask(test);
        //5.将`FutureTask`的对象作为参数传给`Thread`类,创建对象并调用start()方法。
        Thread thread = new Thread(futuretask);
        thread.start();
        //get方法可以获取返回值
        System.out.println("偶数总合是:"+futuretask.get());
    }
}
//输出结果:
2
4
6
8
10
12
14
16
18
20
偶数总合是:110

实现Callable接口创建多线程的特点:

​ 1.call()方法可以有返回值,可以使用get()方法获取返回值。

​ 2.call()方法可以抛出异常, 而且能被外面捕获到。

​ 3.Callable支持泛型。


  • 使用线程池创建多线程

    一.实现Runnable接口的方式创建:

package day02;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class Number implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            if (i % 2 == 0){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}

public class ThreadPool {
    public static void main(String[] args){
        ExecutorService service = Executors.newFixedThreadPool(10);
        Number num = new Number();
        service.execute(num);
        service.shutdown();

二.实现Callable接口的方式创建:

package day02;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class Number implements Callable {
    @Override
    public Object call() {
        for (int i = 0; i < 20; i++) {
            if (i % 2 == 0){
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
        return null;
    }
}

public class ThreadPool {
    public static void main(String[] args){
        ExecutorService service = Executors.newFixedThreadPool(10);
        Number num = new Number();
        service.submit(num);//区别在这里
        service.shutdown();
    }
}

  • 线程池好处:

    1.频繁创建线程和销毁使用量较大的资源,比如并发的线程,对性能影响较大,所以需要创建线 程池存放线程,使用的时候直接获取,实现重复利用,提高效率。

    2.降低创建线程时间,提高响应速度。

    3.降低资源的消耗。

    4.便于线程管理。

java多线程的创建

前言:虽然java的API中说创建多线程的方式只有两种(Therearetwowaystocreateanewthreadofexecution),分别是继承Thread类创建和实现Runnable接口创建,在上一篇博文中演示了这两种,详见,但是JDK5.0以后新增了两种,分别是实现Callable接口... 查看详情

《java多线程——线程简介与其创建》

Java给多线程编程提供了内置的支持。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。这里定... 查看详情

java-多线程创建

Java线程类也是一个object类,它的实例都继承自java.lang.Thread或其子类。可以用如下方式用java中创建一个线程,执行该线程可以调用该线程的start()方法:Treadthread=newThread();thread.start();在上面的例子中,我们并没有为线程编写运行代码... 查看详情

java-多线程-创建线程的三种方式

JAVA-多线程-创建线程的三种方式并发:同一时间只有一条指令在执行,多个进程的指令被快速轮换执行。并行:同一时间有多条指令在多个处理器上运行。进程:每个运行中的程序就是一个进程。线程:线程(Thread)也被称为轻... 查看详情

java学习-多线程的创建

多线程查找文件内容遍历所有文件,当遍历到文件名是.java结尾的时候,创建一个线程去查找这个文件的内容(是否包含“Magic”字符串),不必等待这个线程结束,继续遍历下一个文件。1packagemultiplethread;23importjava.io.Buffer... 查看详情

java多线程入门

JAVA多线程概述为什么使用多线程进程之间不能共享内存,但线程之间共享内存很容易系统创建进程需要为该进程重新分配系统资源,但创建线程代价小得多,因此使用多线程来实现多任务并发比多进程的效率高JAVA内置了多线程... 查看详情

java多线程01(thread类线程创建线程池)

Java多线程(Thread类、线程创建、线程池)第一章多线程1.1多线程介绍1.1.1基本概念进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。... 查看详情

java多线程的创建方法

 Java 线程类也是一个 object 类,它的实例都继承自java.lang.Thread 或其子类。 可以用如下方式用 java 中创建一个线程,执行该线程可以调用该线程的 start()方法: Treadthread=newThread();thread.start(); ... 查看详情

第五周作业(java多线程创建的三个方法)

  我最近在学习Java中多线程,并且觉得多线程这块在以后的Java开发中显得极为重要,就谈一下Java实现多线程的三种方式。JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实... 查看详情

java多线程的创建方法

Java 线程类也是一个 object 类,它的实例都继承自java.lang.Thread 或其子类。 可以用如下方式用 java 中创建一个线程,执行该线程可以调用该线程的 start()方法: Treadthread=newThread();thread.start(); 在上... 查看详情

java多线程入门

   为什么使用多线程进程之间不能共享内存,但线程之间共享内存很容易系统创建进程需要为该进程重新分配系统资源,但创建线程代价小得多,因此使用多线程来实现多任务并发比多进程的效率高JAVA内置了多线程... 查看详情

java线程教程:使用java创建线程和多线程(代码片段)

与许多其他计算机语言不同,Java提供了对多线程的内置支持。Java中的多线程包含两个或多个可以同时运行的部分。Java线程实际上是一个轻量级进程。本文将介绍许多人发现棘手或难以理解的JavaThread概念。 我将讨论以下主... 查看详情

java创建实现多线程的方式

一、Java使用多线程主要有三种方式:第一种:继承Thread类步骤:① 定义一个类,继承Thread类,并重写Thead类的run方法,run方法内的内容为该线程要执行的任务。run方法也被称为执行体。      ②创建Thead... 查看详情

java多线程:创建线程的四种方式

创建线程的四种方式方式一:继承自Thread类方法步骤1.创建一个继承于Thread类的子类2.重写Thread类的run()方法->将线程的执行操作声明到run()中3.创建Thread类的子类对象4.通过此对象调用start()方法例如:输出0~100以内所有的偶数publ... 查看详情

多线程创建方式

1、继承Thread类创建多线程:继承java.lang.Thread类,重写Thread类的run()方法,在run()方法中实现运行在线程上的代码,调用start()方法开启线程。2、实现Runable接口:实现java.lang.Runnable接口,重写run()方法,在run()方法中实现运行在... 查看详情

java之多线程创建方式

多线程的由来我们在之前,学习的程序在没有跳转语句的前提下,都是由上至下依次执行,那现在想要设计一个程序,边打游戏边听歌,怎么设计?要解决上述问题,咱们得使用多进程或者多线程来解决.多线程的好处:提高程序... 查看详情

java之多线程讲解

一、线程解析(1)线程的创建  1、继承Thread类创建线程类,代码如下://1、定义一个继承Thread类的子类,并重写该类的run()方法;//2、创建Thread子类的实例,即创建了线程对象;//3、调用该线程对象的start()方法启动线程。clas... 查看详情

java多线程——线程的概念和创建(代码片段)

文章目录一、进程二、线程1.线程的概念2.进程和线程的关系3.进程和线程之间的区别和联系三、Java中的线程1.线程的创建方式2.start()和run()的区别3.jconsole4.多线程的好处一、进程关于进程更详细的介绍可以看一下上一篇博客计算... 查看详情