首页 > 编程语言 >java实现多线程的四种方式

java实现多线程的四种方式

时间:2022-08-19 15:00:08浏览次数:70  
标签:java ser Thread int Test new 多线程 public 四种

实现多线程的三种方式:继承Thread类、实现Runnable接口、使用Callable和Future接口、使用线程池创建线程

一、继承Thread类,重写run方法

public class MyThread extends Thread{

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println("我在听音乐");
        }
    }

    public static void main(String[] args) {

        MyThread myThread = new MyThread();
        myThread.start();
        for (int i = 0; i < 20; i++) {
            System.out.println("我在学习多线程");
        }
    }
}

二、实现Runnable接口

public class MyThread2 implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println("我在听音乐");
        }
    }

    public static void main(String[] args) {

        Thread myThread = new Thread(new MyThread2());
        myThread.start();

        for (int i = 0; i < 20; i++) {
            System.out.println("我在学习多线程");
        }
    }
}

三、使用Callable和Future接口创建线程

public class MyThread4 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {

        Test test = new Test();
        FutureTask<Integer> ft = new FutureTask<>(test);
        Thread thread = new Thread(ft);

        thread.start();
        for (int i = 0; i < 200; i++) {
            System.out.println("我在学习多线程");
        }

        //获取返回值
        ft.get();

    }

    static class Test implements Callable<Integer>{

        @Override
        public Integer call() throws Exception {
            for (int i = 0; i < 200; i++) {
                System.out.println("我在听音乐");
            }

            return null;
        }
    }
}

四、使用线程池创建线程
实现Callable接口,需要返回值类型
重写call方法,需要抛出异常
创建目标对象
创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(3);
提交执行:Future sub1 = ser.submit(test1);
获取结果:Integer integer1 = sub1.get();
关闭服务:ser.shutdownNow();

public class MyThread3 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {

        Test test1 = new Test(1);
        Test test2 = new Test(2);
        Test test3 = new Test(3);
        //创建执行服务
        ExecutorService ser = Executors.newFixedThreadPool(3);
        //提交执行
        Future<Integer> sub1 = ser.submit(test1);
        Future<Integer> sub2 = ser.submit(test2);
        Future<Integer> sub3 = ser.submit(test3);
        //获取结果
        Integer integer1 = sub1.get();
        Integer integer2 = sub2.get();
        Integer integer3 = sub3.get();
        //关闭服务
        ser.shutdownNow();

    }

    static class Test implements Callable<Integer>{

        private int a;

        public Test(int a) {
            this.a = a;
        }

        @Override
        public Integer call() throws Exception {
            for (int i = 0; i < 20; i++) {
                System.out.println("我在听音乐"+a);
            }

            return null;
        }
    }
}

标签:java,ser,Thread,int,Test,new,多线程,public,四种
From: https://www.cnblogs.com/tanhongwei/p/16602009.html

相关文章

  • 第一个Java程序
    publicclassHelloWorld{publicstaticvoidmain(String[]args){//main方法是一个程序的主入口是不可缺少的//TODO自动生成的方法存根......
  • 多线程中的安全问题
    目录synchronizedsynchronized的同步代码块synchronized的非静态同步方法synchronized的静态同步方法多入口和多窗口卖票的不同情况Lock锁synchronizedsynchronized格式......
  • Java实现多线程的四种方式
    java中实现多线程主要有四种方式:继承Thread类一,继承Thread类,重写run方法publicclassThreadTest{//主线程publicstaticvoidmain(String[]args){......
  • java:关于打包时的资源获取问题
    我们有时会遇上打包后,图片资源不显示等问题,我总结了以下两个方法:1.将资源文件放在外部,不打入包中,此时直接用相对路径或绝对路径就可以获取资源文件;比如将资源文件与打好的......
  • java:菜单的使用
    1.JMenuBar菜单条2.JMenu菜单3.JMenuItem菜单项菜单条包含菜单,每个菜单有包含一些菜单项。菜单也可以修改布局,默认是流式布局,可自定义。直接上一段代码演示:1impor......
  • Java流程控制
    Java流程控制顺序结构Java的基本结构就是顺序结构,除非特别指明,否则就是按照顺序一句一句执行。顺序结构是最简单的算法结构语句与语句之间,框与框之间是按从上到......
  • JavaScript基础回顾
    变量声明var伪全局变量const常量(块级作用域)let块级作用域变量运算符及表达式算术运算 +-*/%++--逻辑运算&&(同true取最后一个false取第一个) ||(有true取......
  • 【java基础】分支结构if-else、switch-case
    1.if-elseinta=10;if(a==0){ System.out.println("a等于0");}elseif(a<0){ System.out.println("a小于0");}else{ System.out.println("a大于0");}(1)条件表达式......
  • Java第一天
    第一天学Java 一.了解JavaJava的主要应用于各种系统、各大平台、手机app、桌面工具以及SaaS云等等 二.比较Java和其他语言Java的运用较为广泛,以c语言为基础在199......
  • 简单了解Java微服务(一)
    一.微服务诞生前的传统Java项目架构:单体架构在微服务正式应用于项目架构体系时,传统的Java项目架构一般为单体架构。这种单体架构的特点是将所有的业务功能集中在一个......