首页 > 编程语言 >JAVA多线程的使用和创建的几种方式

JAVA多线程的使用和创建的几种方式

时间:2024-08-09 11:18:15浏览次数:13  
标签:JAVA String Thread class 几种 线程 taskName 多线程 public

Thrad 创建和使用

  • 创建实体类,继承Thread
  • 实现 run() 方法
  • 调用start()方法
public class ThreadDemo extends Thread{

    Logger logger = LoggerFactory.getLogger(ThreadDemo.class);
    
    private String taskName;

    public String getTaskName() {
        return taskName;
    }

    public void setTaskName(String taskName) {
        this.taskName = taskName;
    }

    public ThreadDemo(String name) {
        this.setTaskName(name);
    }
    
    @Override
    public void run() {
        logger.info("线程-----------{},执行",taskName);
    }
}

Main方法调用

public class ThreadMainDemo {

    public static void main(String[] args) {
        ThreadDemo thread = new ThreadDemo("线程1");
        thread.start();
    }
}
// 输出
线程-----------线程1,执行

Runnable

  • 创建实体类,实现Runnable接口
  • 重写 run 方法
  • 创建Thrad 类,将实现了Runnable接口的类作为参数传递到Thrad构造函数中
  • 调用Thrad中的 start() 方法
public class RunnableDemo implements Runnable{

    Logger logger = LoggerFactory.getLogger(RunnableDemo.class);

    private String taskName;

    public String getTaskName() {
        return taskName;
    }

    public void setTaskName(String taskName) {
        this.taskName = taskName;
    }

    public RunnableDemo(String name) {
        this.setTaskName(name);
    }

    @Override
    public void run() {
        logger.info("基于runnable实现线程的创建:{}",taskName);
    }
}

public class RunnableMainDemo {

    public static void main(String[] args) {
        RunnableDemo runnable = new RunnableDemo("线程runnable");
        Thread thread = new Thread(runnable);
        thread.start();
    }
}
// 输出
 基于runnable实现线程的创建:线程runnable

Callable

Callable是一个函数式接口,此时就可以用lambda表达式更简洁地使用它。Callable是个泛型接口,只有一个方法call,该方法返回类型就是传递进来的V类型

  • 创建实体类,实现Callable
  • 重写 call() 方法
  • 创建FutureTask类,该类实现了 RunnableFuture 接口,可以用来包装Callable或者Runnbale对象
  • 将 实现了 Callable的实体类 作为形参传入 FutureTask 中的构造器
  • 创建Thread 类,将FutureTask作为形参传入Thread构造器中
  • 调用 Thread类的start()方法
  • 如果要获取call的返回结果,则调用 FutureTask中的 get()方法
// Callable 接受泛型参数,当执行该线程时会返回一个指定的泛型
public class CallableDemo implements Callable<Integer> {

    Logger logger = LoggerFactory.getLogger(CallableDemo.class);

    private String taskName;

    public String getTaskName() {
        return taskName;
    }

    public void setTaskName(String taskName) {
        this.taskName = taskName;
    }

    public CallableDemo(String name) {
        this.setTaskName(name);
    }

    @Override
    public Integer call() throws Exception {
        logger.info("基于callable实现多线程:{}",taskName);
        return 100;
    }
}

public class CallableMainDemo {

    public static void main(String[] args) {
        CallableDemo callable = new CallableDemo("callable");
        FutureTask<Integer> futureTask = new FutureTask<>(callable);
        // 创建 Thread
        Thread thread = new Thread(futureTask);
        thread.start();
        // 获取 callable中的 call方法 结果
        try {
            Integer integer = futureTask.get();
            System.out.println(integer);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}
// 执行结果
基于callable实现多线程:callable
100

线程池暂时先搁置

标签:JAVA,String,Thread,class,几种,线程,taskName,多线程,public
From: https://www.cnblogs.com/zgf123/p/18350439

相关文章

  • Unity匀速移动的几种方案 Lerp,SmoothDamp,MoveTowards
    速览Lerp用于插值,可以和协程配合用于移动。SmoothDamp是阻尼移动,从不超过。MoveTowards是匀速移动,也不会超过。 方案1,使用Lerp——先快后慢运动(线性衰减)(不好用✖)Lerp最简单的用法如下:voidUpdate(){transform.position=Vector3.Lerp(transform.position,endPos,Tim......
  • 多线程系列:线程中包含子线程
    多线程系列:线程中包含子线程这里展示的多线程基本包含了常见的多线程操作:实现线程中包含子线程;计算子线程耗时展示一个函数如何通过参数传递进行多线程一个线程调用一个函数的情况代码示例importthreadingimporttimefrompprintimportpprintimportqueue#假......
  • JAVA修饰符、运算符、循环语句
    JAVA修饰符修饰符用来定义类、方法或者变量,通常放在语句的最前端一、访问修饰符1、default默认访问修饰符:在同一包内可见,不使用任何修饰符,使用对象为类、接口、变量、方法,访问级别是包级别(package-level),即只能被同一包中的其他类访问2、private私有访问修饰符:最严格的访问级......
  • JavaScript toLocaleString() 方法
    定义和用法:toLocaleString()方法可根据本地时间把Date对象转换为字符串,并返回结果。语法:dateObject.toLocaleString()返回值dateObject的字符串表示,以本地时间区表示,并根据本地规则格式化。问题//Javascript中newDate().toLocaleString()在不同浏览器中的结果不一致的解决......
  • K8S中,flannel有几种模式?
    在Kubernetes(K8S)中,Flannel作为一个流行的容器网络接口(CNI)插件,用于为集群中的容器提供网络互通能力。Flannel支持多种模式来实现其网络功能,主要包括以下几种常见模式:1.VXLAN模式描述:VXLAN(VirtualExtensibleLAN)是Flannel的默认后端驱动,它使用VXLAN封装技术来创建跨节点的虚拟......
  • Java enum(枚举)
    在Java中,enum(枚举)是一种特殊的数据类型,允许你定义一组命名的常量。这些常量通常代表一个固定的、有限的集合。例如,一年中的季节、交通信号灯的状态,或者一副扑克牌的花色。基本用法一个基本的enum定义如下:publicenumSeason{WINTER,SPRING,SUMMER,FALL}这里,Season......
  • java 面向对象2
    1.对类的命名要起到见名知意的效果。对于属性成员最好用private修饰提高权限,使得数据的存储更加安全。一般来说对于类用大驼峰命名法每个单词首字母都是大写如图2.在java中没有指针的概念,但是存在引用所以this在使用的时候就可以通过'.'来访问成员。3.与c++类似不存在空参构造......
  • Java Optional
    Optional是Java8引入的一个容器类,用于处理可能为空(null)的值。它旨在减少NullPointerException(空指针异常)的发生,并提供一种更具表现力和安全的方式来处理可选值。Optional的基本概念Optional<T>:Optional是一个泛型类,可以包含类型为T的值,或者为空。非空值:Optional可以......
  • Java Stream
    JavaStream是Java8引入的一种强大工具,旨在简化数据处理操作。它允许开发者以声明性方式对集合或其他数据源执行一系列复杂的操作,如过滤、映射、规约等,从而提高代码的简洁性和可读性。以下是关于JavaStreamAPI的更详细的概述和示例,帮助你更好地理解其工作原理和应用场景。......
  • Java计算机毕业设计江理工大学生创新创业项目管理系统的设计与实现(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今社会,创新创业已成为推动经济发展、促进社会进步的重要力量。高校作为人才培养的摇篮,肩负着培养具有创新精神和实践能力的高素质人才的重任。江......