码迷,mamicode.com
首页 > 编程语言 > 详细

实现多线程

时间:2018-03-15 19:18:55      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:生命周期   bsp   ade   let   任务   rri   运行   new   使用   

使用多线程的三种方式

1、实现Runnable接口

2、实现Callable接口

3、继承Thread类

4、jdk1.5之后,使用Executor线程池

实现Runnable和Callable接口只是当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还是需要Thread来调用,可以说是任务需要线程驱动来执行

1、实现Runnable接口

 实现run方法

public class MyRunnable implements Runnable {

    @Override
    public void run() {
        System.out.println("runnable ....");
    }
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start();
    }
}

2、实现Callable接口

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

public class MyCallable implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        System.out.println("callable .....");
        return 1;
    }
    public static void main(String[] args) {
        MyCallable myCallable = new MyCallable();
        FutureTask<Integer> ft = new FutureTask<Integer>(myCallable);
        Thread thread = new Thread(ft);
        thread.start();
    }
}

3、继承Thread类

public class MyThread extends Thread {

    @Override
    public void run() {
        System.out.println("myThread is running .....");
    }
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
    }
}

4、实现接口 vs 继承 Thread

····实现接口会更好一些

···1)java是单继承,继承Thread类别的类就不能再继承,但是可以多实现

···2)类可能只要求可执行即可,继承整个Thread类的开销会很大

5、Executor

 Executor 管理多个异步任务的执行,而无需程序员显示地管理线程的生命周期

   主要有三种Executor

   1)CachedThreadPool:一个任务创建一个线程;

   2)FixedThreadPool:所有任务只能使用固定大小线程数量;

   3)SingleThreadExecutor:相当于大小为1的FixedThreadPool。 

 

实现多线程

标签:生命周期   bsp   ade   let   任务   rri   运行   new   使用   

原文地址:https://www.cnblogs.com/cherish010/p/8575038.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!