zoukankan      html  css  js  c++  java
  • java中线程的三种实现方式

    一下记录下线程的3中实现方式:Thread,Runnable,Callable

    不需要返回值时,建议使用Runnable;有返回值时建议使用Callable

    代码如下所示:

    package com.four.day01;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.FutureTask;
    
    /**
     * 此处主要是实现线程的三种方式
     * 1.继承Thread类
     * 2.实现runnable接口
     * 3.实现Callable接口
     * @author future
     *
     */
    public class TestThread {
        
         
        class MyThread extends Thread{
            public void run(){
                System.out.println("运行MyThread类中的run方法,使用继承创建线程");
            }
        }
         
        class MyRunnable implements Runnable{
            @Override
            public void run() {
                System.out.println("运行MyRunnable类中的run方法,使用实现Runnable接口创建线程");
            }
            
        }
        
        class MyCallable implements Callable<String>{
    
            @Override
            public String call() throws Exception {
                System.out.println("运行MyCallable类中的call方法,使用实现Callable接口创建线程");
                return "Class_Result";
            }
             
        }
    
        public static void main(String[] args) throws Exception {
            /**
             * 线程的启动,是通过Thread类中的start()方法进行启动的
             * 1.直接继承Thread时,直接实例化,调用实例中的start方法即可
             * 2.实现Runnable接口的,需要把Runnable实例化对象放到Thread的构造方法中进行初始化
             *   此线程运行后,没有返回结果,其运行的run方法是返回void类型的
             * 3.实现Callable接口的,需要把Callable接口包装一下,最终可以放到Thread中进行运行线程
             *   故通过FutureTask对Callable实例化对象进行包装,然后作为Thread的构造参数,
             *   使用Thread类中的start方法进行启动
             *   
             * 以上3者的区别
             *  Thread有单继承的局限性,若一个类继承线程Thread就不能继承其他类
             *  Runnable是接口,可以多实现,解决了单继承的问题,不过没有返回值
             *  Callable也是接口,不过线程运行完后会有返回值,是泛型的,可以自己指定
             *  程序中的实例是String类型的
             *  
             *  整体程序中,通过内部类进行实现的,在实例化内部类时,必须先实例化外部类(因为没有使用static修饰)
             */
            
            TestThread testThread=new TestThread();
            MyThread myThread=testThread.new MyThread();
            myThread.start();
            
            MyRunnable myRunnable=testThread.new MyRunnable();
            Thread t=new Thread(myRunnable);
            t.start();
            
            MyCallable myCallable=testThread.new MyCallable();
            FutureTask ftask=new FutureTask(myCallable);
            Thread t2=new Thread(ftask);
            t2.start();
            System.out.println("Callable接口的返回值是:"+ftask.get());
        }
    
    }

    运行结果为:

    运行MyThread类中的run方法,使用继承创建线程
    运行MyRunnable类中的run方法,使用实现Runnable接口创建线程
    运行MyCallable类中的call方法,使用实现Callable接口创建线程
    Callable接口的返回值是:Class_Result

  • 相关阅读:
    20159320《网络攻防实践》第4周教材学习总结
    20159320《网络攻防实践》第3周学习总结
    20159320 《网络攻防实践》第3周教材学习总结
    20159320 《网络攻防实践》第3周视频学习总结
    网络攻防学习心得一(20159320)学习小结
    Android 开发环境搭建以及编译
    iTOP-4412 开发板镜像的烧写
    Ubuntu 的基本操作
    iTOP-4412 平台基础软件的安装和学习
    几个关于嵌入式芯片的硬件系统
  • 原文地址:https://www.cnblogs.com/guopengxia0719/p/10657562.html
Copyright © 2011-2022 走看看