Java 多线程(一)

转战JavaEE ,总体上是非常习惯和喜欢Java这门语言,先不说Java为何而生,适应什么场景,解决什么问题,单论Java那几十年沉淀积累,也给人一种厚重、正统感!扯远啦,Java也只是一门语言,一个给人们解决问题的工具,工具不论好坏,关键看怎们用!

下面自己总结下JavaEE中的多线程。

三种使用方法

implements Rannable

class MyThread implements Runnable{

    @Override
    public void run() {

        for (int i = 0; i < 5; i++) {
            System.out.println("当前线程:"+Thread.currentThread().getName());
        }
    }
}

public class ThreadTest {

    public static void main(String[] args) {

        new Thread(new MyThread(), "子线程1").start();
    }   
}

extends Thread

class MyThread extends Thread{

    @Override
    public void run() {

        for (int i = 0; i < 5; i++) {
            System.out.println("当前线程:"+Thread.currentThread().getName());
        }
    }
}

public class ThreadTest {

    public static void main(String[] args) {

        new MyThread().start();
    }   
}

implements Callable

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

class MyThread implements Callable<String>{

    @Override
    public String call() throws Exception {
        //执行任务
        return "任务执行完毕";
    }
}

public class ThreadTest {

    public static void main(String[] args) throws Exception{

        MyThread task = new MyThread();
        FutureTask<String> futureTask = new FutureTask<>(task); //FutureTask 也继承了Runnable接口
        new Thread(futureTask).start();

        System.out.println("主线程:"+ futureTask.get());
    }   
}

小结

1、继承Thread和Rannable有何区别?

这两种方式都可以实现多线程开发,但在实践中,首推Rannable。
原因有二,其一,使用Rannable可以避免单继承的局限问题;其二,使用Runable可以更好的体现数据共享的概念。

2、Callable有什么特点?

在方案一,方案二当中我们发现他们有个共同缺陷,就是都不能反回操作结果,为了弥补这一缺陷,从jdk1.5开始,Java便添加了此接口,来弥补前面两种方案无法反回操作结果的缺陷。

猜你喜欢

转载自blog.csdn.net/lovehalok/article/details/80876226