Java多线程实现的3种方式

作者: Android开发哥 | 来源:发表于2017-02-26 14:20 被阅读113次

直接继承Thread类,重写run方法

package snippet;
public class test {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            new MyThread().start();
        }
    }
}
class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 1; i < 100; i++) {
            System.out.println(getName() + "--->" + i);
        }
    }
}

使用Runable接口+Thread

作为Thread 参数传入(与上面没有什么不同,只是为了减少设计的藕性)

package snippet;
public class test {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            new Thread(new MyRunnable()).start();
        }
    }
}
class MyRunnable implements Runnable {
    @Override
    public void run() {
        for (int i = 1; i < 100; i++) {
            System.out.println(Thread.currentThread().getName() + "--->" + i);
        }
    }
}

注意,当实现Runable接口并且覆写Thread的run方法时,只会调用Thread的run方法.

使用Runable接口

使用Runable接口比较复杂,需要使用到线程池,但是它可以带返回值

package snippet;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
class MyCallable implements Callable<Integer> {
    
    private int    num1;
    private int    num2;
                
    public MyCallable(int num1, int num2) {
        try {
            this.num1 = num1;
            this.num2 = num2;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    @Override
    public Integer call() throws Exception {
        return num1 + num2;
    }
    
}
public class test {
    public static void main(String[] args) throws Exception {
        ExecutorService pool = Executors.newCachedThreadPool();
        /**
         * 创建一个线程池
         */
        List<Future<Integer>> results = new ArrayList<>();
        /**
         * Future<T>是泛型接口,其中泛型为返回数据类型
         */
        
        for (int i = 0; i < 5; i++) {
            Future<Integer> result = pool.submit(new MyCallable(i, i + 1));
            results.add(result);
        }
        
        for (int i = 0; i < results.size(); i++) {
            System.out.println(results.get(i).get());
        }
        /**
         * 使用get去获取call方法返回的值,可设置超时. 因为有时候若等待时间太长,则造成体验不好
         */
    }
}

相关文章

  • java多线程

    1.JAVA多线程实现方式 JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用E...

  • Q&A-04 多线程&分布式

    1、Java实现多线程有哪几种方式 Java 多线程实现方式主要有四种: 继承Thread类 实现Runnable...

  • Java基础(六)

    多线程 Java多线程并发 1.1 JAVA 并发知识库 1.2 JAVA 线程实现/创建方式 1.2.1 继承 ...

  • 多线程(最全面试题04)

    Java实现线程有哪几种方式?1、继承Thread类实现多线程2、实现Runnable接口方式实现多线程3、使用E...

  • 多线程经典面试题及答案

    java实现线程有哪几种方式 1.继承Thread类实现多线程2.实现Runnable接口方式实现多线程3.使用线...

  • Java中的多线程实现方式

    Java中的多线程实现方式 在我们的开发的过程中,常常会碰到多线程的问题,对于多线程的实现方式主要有两种:实现Ru...

  • Java多线程知识点

    1.java中实现多线程的几种方式 java中实现多线程的方式主要有两种,第一种是继承Thread类,第二种是实现...

  • Thread,Runnable和Callable

    Java多线程实现方式:Thread,Runnable,Callable多线程是乱序执行Thread===1.Th...

  • Java多线程-实例解析

    Java多线程实例 3种实现方法 Java中的多线程有三种实现方式: 1.继承Thread类,重写run方法。Th...

  • java并发编程(一)

    **java多线程编程(一)** 基本实现方式及同步原理 --- 三种实现方式: 1、继承Thr...

网友评论

    本文标题:Java多线程实现的3种方式

    本文链接:https://www.haomeiwen.com/subject/sqbowttx.html