Java 开启多线程常见的4种方法

目录
  • 简介
  • 1. 实现 Runnable 接口
  • 2. 实现 Callable 接口
  • 3. 继承 Thread 类
  • 4. 匿名内部类的写法

简介

常见的4种使用线程的方法:

1实现 Runnable 接口;

2实现 Callable 接口;

3继承 Thread 类。

4匿名内部类的写法。

1. 实现 Runnable 接口

编写测试类RunnableDemo 实现 Runnable 接口,实现接口中的 run() 方法。

public class RunnableDemo implements Runnable {

    @Override
    public void run() {
            System.out.println(Thread.currentThread().getName() + "执行了");
    }

   /**
     * 使用 Runnable 实例再创建一个 Thread 实例,然后调用 Thread 实例的 start() 方法来启动线程。
     */
    public static void main(String[] args) {
        RunnableDemo runnable = new RunnableDemo();
        Thread thread0 = new Thread(runnable);
        Thread thread1 = new Thread(runnable);
        thread0.start();
        thread1.start();

    }
}

运行main方法

2. 实现 Callable 接口

Runnable 相比,Callable 可以有返回值,返回值通过 FutureTask 进行封装。

public class CallableDemo implements Callable<String> {

    @Override
    public String call() {
        System.out.println(Thread.currentThread().getName() + "执行了");
        return "执行成功!";
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CallableDemo mc = new CallableDemo();
        FutureTask<String> ft0 = new FutureTask<>(mc);
        FutureTask<String> ft1 = new FutureTask<>(mc);
        Thread thread0 = new Thread(ft0);
        Thread thread1 = new Thread(ft1);
        thread0.start();
        thread1.start();
        System.out.println(ft0.get());
        System.out.println(ft1.get());
    }
}

启动main方法

3. 继承 Thread 类

同样也是需要实现 run() 方法,因为 Thread 类也实现了 Runable 接口。

public class ThreadDemo extends Thread {

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + "执行了");
    }

    public static void main(String[] args) {
        ThreadDemo thread0 = new ThreadDemo();
        ThreadDemo thread1 = new ThreadDemo();
        thread0.start();
        thread1.start();
    }
}

启动main方法

4. 匿名内部类的写法

new Runnable()是一个实现接口Runnable的类的对象,后面的run()方法是该类里实现的方法,这就是匿名内部类的写法

public class ThreadTest {

    public static void start() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + "执行了");
            }
        }).start();
    }

    public static void main(String[] args) {
        start();
        start();
    }
}

到此这篇关于Java 开启多线程常见的4种方法的文章就介绍到这了,更多相关Java 开启多线程内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java多线程开启的三种方式你知道吗

    目录 1.继承Thread类,新建一个当前类对象,并且运行其start()方法 2.实现Runnable接口,然后新建当前类对象,接着新建Thread对象时把当前类对象传进去,最后运行Thread对象的start()方法 3.实现Callable接口,新建当前类对象,在新建FutureTask类对象时传入当前类对象,接着新建Thread类对象时传入FutureTask类对象,最后运行Thread对象的start()方法 总结 1.继承Thread类,新建一个当前类对象,并且运行其start()方

  • Java 开启多线程常见的4种方法

    目录 简介 1. 实现 Runnable 接口 2. 实现 Callable 接口 3. 继承 Thread 类 4. 匿名内部类的写法 简介 常见的4种使用线程的方法: 1实现 Runnable 接口: 2实现 Callable 接口: 3继承 Thread 类. 4匿名内部类的写法. 1. 实现 Runnable 接口 编写测试类RunnableDemo 实现 Runnable 接口,实现接口中的 run() 方法. public class RunnableDemo implements

  • java 多线程的同步几种方法

    java 多线程的同步几种方法 一.引言 前几天面试,被大师虐残了,好多基础知识必须得重新拿起来啊.闲话不多说,进入正题. 二.为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常.举个例子,如果一个银行账户同时被两个线程操作,一个取100块,一个存钱100块.假设账户原本有0块,如果取钱线程和存钱线程同时发生,会出现什么结果呢?取钱不成功,账户余额是100.取钱成功了,账户余额是0.那到底是哪个

  • Java 多线程传值的四种方法

    其实大家都知道多线程传值有三种方式: 1:通过构造方法传递数据 2:通过变量和方法传递数据 3:通过回调函数传递数据 那么博主有个非常变态的需求,所以找出了第四种实现方式,先看效果图: 动态Cron4j调度器,我曾经发过类似的文章,可以去搜索一下. 点击执行走下边的代码,然后根据类名反编译 public static void executeCron4j(String packageClass){ try { Object taskObj = classNewInstance(packageCl

  • Java项目实现定时任务的三种方法

    目录 1 使用java.util.Timer 2 使用ScheduledExecutorService 3 使用Spring Task 总结 1 使用java.util.Timer 这种方式的定时任务主要用到两个类,Timer 和 TimerTask,使用起来比较简单.其中 Timer 负责设定 TimerTask 的起始与间隔执行时间. TimerTask是一个抽象类,new的时候实现自己的 run 方法,然后将其丢给 Timer 去执行即可. 代码示例: import java.time.L

  • java检查服务器的连通两种方法代码分享

    首先要了解一下ping的内容. 概述 PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序.Ping发送一个ICMP(Internet Control Messages Protocol)即因特网信报控制协议:回声请求消息给目的地并报告是否收到所希望的ICMPecho (ICMP回声应答).它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:利用

  • java中List分页的几种方法介绍

    目录 1.根据入参带分页参数进行sql查询分页 2.对所有list根据分页参数分页 3.PageHelper分页 1.根据入参带分页参数进行sql查询分页 Criteria criteria = new Criteria(); //将dataAuto转成 factoryId brandId seriesId 等查询条件 String dataAuth = ""; TypeCaseHelper.dataAuto(criteria, dataAuth); // 设置分页信息 ExtPage

  • Java中List分片的5种方法小结

    目录 简介 1.Google Guava 2.apache commons 3.Hutool 4.JDK 5.自定义分片 总结 前些天在实现 MyBatis 批量插入时遇到了一个问题,当批量插入的数据量比较大时,会导致程序执行报错,如下图所示: 原因是 MySQL 只能执行一定长度的 SQL 语句,但当插入的数据量较多时,会生成一条很长的 SQL,这样程序在执行时就会报错. 要解决这个问题,有两种方法:第一,设置 MySQL 可以执行 SQL 的最大长度:第二,将一个大 List 分成 N 个小

  • Java唤醒本地应用的两种方法详解

    目录 引言 1. Runtime使用方式 2. ProcessBuilder使用方式 3. 小结 引言 作为一个后端同学,经常被安全的小伙伴盯上,找一找安全漏洞:除了常说的注入之外,还有比较吓人的执行远程命令,唤醒本地应用程序等:然后有意思的问题就来了,写了这么多年的代码,好像还真没有尝试过用java来唤醒本地应用程序的 比如说一个最简单的,打开本地的计算器,应该怎么搞? 接下来本文将介绍一下如何使用java打开本地应用,以及打开mac系统中特殊一点的处理方式(直白来说就是不同操作系统,使用姿势

  • Java从控制台读入数据的几种方法总结

    这里记录Java中从控制台读入信息的几种方式,已备后查! (1)JDK 1.4(JDK 1.5和JDK 1.6也都兼容这种方法) public class TestConsole1 { public static void main(String[] args) { String str = readDataFromConsole("Please input string:); System.out.println("The information from console: + st

  • Java追加文件内容的三种方法实例代码

    整理文档,搜刮出一个Java追加文件内容的三种方法的代码,稍微整理精简一下做下分享. import Java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.RandomAccessFile;

随机推荐