首页 > 编程语言 >java-线程的使用方式

java-线程的使用方式

时间:2023-03-20 11:22:32浏览次数:31  
标签:java 方式 Thread 接口 start 线程 new public

前言,三种使用线程的方法:实现Runnable接口、实现Callable接口、继承Thread类。实现接口会更好,因为继承了Thread类就无法继承其他类,但可以实现多个接口

/**
* 线程状态:new、runnable、blocked、time waiting、waiting、terminated
* 类可能只要求可执行就行,继承整个Thread类开销过大
*/

一、实现Runnable接口
// 线程使用方式:实现Runnable接口,需要实现run()方法,通过Thread调用start()来启动线程
class MyRunnable implements Runnable {

    @Override
    public void run() {
        m1();
    }

    public void m1(){
        System.out.println("do something");
    }

    public static void main(String[] args) {
        MyRunnable instance = new MyRunnable();
        Thread thread = new Thread(instance);
        thread.start();
    }

}

  

二、实现Callable接口
// 线程使用方式:实现Callable接口,与Runnable相比,Callable可以有返回值,返回值通过FutureTask封装
class MyCallable implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        return m1();
    }

    public Integer m1(){
        return 123;
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyCallable myCallable = new MyCallable();
        FutureTask<Integer> futureTask = new FutureTask<>(myCallable);
        Thread thread = new Thread(futureTask);
        thread.start();
        System.out.println(futureTask.get());
    }

}

  

三、继承Thread类:
继承Thread类,同样也是需要实现run方法,因为Thread类也实现了Runnable接口;
当调用start()方法启动一个线程时,虚拟机会将该线程放入就绪队列等待调度,当一个线程被调度时就会执行该线程的start()方法
class MyThread extends Thread{

    public void run(){
        System.out.println("do something");
    }

    public static void main(String[] args) {
        Thread thread = new MyThread();
        thread.start();
    }

}

  



标签:java,方式,Thread,接口,start,线程,new,public
From: https://www.cnblogs.com/jinziguang/p/17235666.html

相关文章

  • Java 中如何优化大量的 if...else...
    策略模式(StrategyPattern)将每个条件分支的实现作为一个独立的策略类,然后使用一个上下文对象来选择要执行的策略。这种方法可以将大量的ifelse语句转换为对象之间的交互......
  • Java访问权限修饰符(public , private , protected)
    访问权限修饰符包括:public、protected、private和默认修饰符(friendly/包访问权限)。可以修饰在类、字段、方法前面。public:公开权限,所有类都可以访问。protected:继承访......
  • java 项目使用 本地的gradle wrapper 或者 mvn gradle
    使用ganradle的好处是当前项目对版本idea自动下载mvnwrapper目录结构.mvnwrappermaven-wrapper.jarmaven-wrapper.propertiesMaven......
  • java-基础线程机制
     前言,基础线程机制:Executor管理多个异步任务的执行、Daemon守护线程、sleep()、yield() 一、Executor:1.newCachedThreadPool(),一个任务创建一个线程ExecutorServic......
  • 线程、进程
    一个进程中有多个线程,多个线程共享进程的堆和方法区资源,但是每个线程有自己的程序计数器和栈区域。程序计数器是一块内存区域,用来记录线程当前要执行的指令地址。每个线......
  • Java基础语法-数组
    第一部分:数组1.数组1.1数组介绍数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。1.2数组的定义格式1.2.1第一种格式数据类型[]数组名示例:int[]arr......
  • 【Java】Mybatis Plus LambdaQueryWrapper梳理
    【Java】Mybatis-PlusLambdaQueryWrapper梳理前言为了更方便的实现动态SQL,MybatisPlus在其基础上扩展了LambdaQueryWrapper,LambdaQueryWrapper提供了​​更加简便的查......
  • Tars-Java网络编程源码分析
    作者:vivo互联网服务器团队-JinKai本文从JavaNIO网络编程的基础知识讲到了Tars框架使用NIO进行网络编程的源码分析。一、Tars框架基本介绍Tars是腾讯开源的支持多语言的......
  • 你能说出MySQL主从复制的几种复制方式吗?
    异步复制多线程复制增强半同步复制异步复制MySQL的复制默认是异步的,主从复制至少需要两个MySQL服务,这些MySQL服务可以分布在不同的服务器上,也可以在同一台服务......
  • Linux操作系统中命令行方式获取文件完整路径
    1、 whereis whereis命令用于搜索给定命令的二进制、源码和手册页文件,不能搜索普通文件(whereis可以列出命令、源文件和帮助文档的位置) 2、 which which返回在终......