美文网首页
JDK5.0新增创建线程的方式

JDK5.0新增创建线程的方式

作者: 冯宏志 | 来源:发表于2020-12-16 22:36 被阅读0次
方式一:实现Callable接口
  • 与Runnable接口相比,Callable接口更强大
    1、相比run(),可以有返回值
    2、方法可以抛出异常
    3、支持泛型的返回值
    4、需要借助FutrueTask类,比如获取返回结果

  • 步骤:
    1、创建一个Callable接口的实现类
    2、实现call(),将此线程要执行的操作声明在call()
    3、创建Callable实现类的对象
    4、将此Callable实现类的对象作为参数传递到FutureTask构造器中,创建FutureTask对象
    5、将FutureTask的对象作为参数传递到Thread类的构造器中,创建Thread对象,并调用start()
    6、获取Callable中call()方法的返回值:futureTask.get()

  • 如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程的方式强大
    1、call()可以有返回值
    2、call()可以抛出异常,被外面的操作捕获,获取异常的信息
    3、Callable是支持泛型的

package com.atguigu.java;

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

public class ThreadNew {
    public static void main(String[] args) {
        NumThread numThread = new NumThread();
        FutureTask futureTask = new FutureTask(numThread);
        Thread t1 = new Thread(futureTask);//FutureTask类实现了Runnable接口
        t1.start();
        Object sum = null;
        try {
            sum = futureTask.get();
            System.out.println(sum);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

class NumThread implements Callable {
    @Override
    public Object call() throws Exception {
        int sum = 0;
        for(int i = 0;i <= 100;i++){
            System.out.println(i);
            sum += i;
        }
        return sum;
    }
}

方式二:使用线程池的方式
  • 步骤
    1、提供指定线程数量的线程池
    2、执行指定线程的操作,需要提供实现Runnable接口或Callable接口实现类的对象
    3、关闭连接池

  • 好处
    1、提高响应速度(减少了创建新线程的时间)
    2、降低资源消耗(重复利用线程池中的线程,不需要每次都创建)
    3、便于线程管理

package com.atguigu.java;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPool {
    public static void main(String[] args) {
        //1、提供指定线程数量的线程池
        ExecutorService service = Executors.newFixedThreadPool(10);//service是ExecutorService接口实现类的对象
        //2、执行指定线程的操作,需要提供实现Runnable接口或Callable接口实现类的对象
        service.execute(new NumberThread());//适用使用于Runnable
//      service.submit(Callable callable);//适合使用于Callable
        //3、关闭线程池
        service.shutdown();

        //设置线程池的属性
//        System.out.println(service.getClass());
//        ThreadPoolExecutor service1 = (ThreadPoolExecutor) service;
//        service1.setCorePoolSize(15);
//        service1.setKeepAliveTime();
    }
}

class NumberThread implements Runnable{
    @Override
    public void run() {
        for(int i = 0;i <=100;i++){
            System.out.println(Thread.currentThread().getName() + ":" + i);
        }
    }
}


相关文章

  • JDK5.0新增线程创建方式

    创建线程的方式三 实现Callable接口。 --- JDK 5.0新增 如何实现Callable接口 1.创建一...

  • JDK5.0新增创建线程的方式

    方式一:实现Callable接口 与Runnable接口相比,Callable接口更强大1、相比run(),可以有...

  • Lock锁

    解决线程安全问题的方式三:Lock锁 --- JDK5.0新增的解决线程安全问题 一.示例代码class Win...

  • 线程创建的四种方式+具体案例

    JDK5.0之前 1、继承于Thread类创建线程 1.1、继承Thread类创建线程案例 1.2、线程的常用方法...

  • 【java基础】线程

    java基础 线程 参考详细:Java之多线程 一、创建线程 创建线程常见有两种方式,另外有两种新增方式 1.Th...

  • 2020-07-28 JDK5.0之后新增的创建多线程的方式

    新增方式一:实现Callable接口 新增方式二:使用线程池 如何理解与使用Runnable相比, Callabl...

  • iOS基础知识 (三)

    多线程 多线程创建方式 iOS创建多线程方式主要有NSThread、NSOperation、GCD,这三种方式创建...

  • iOS 多线程-NSThread

    1. 创建和启动线程 创建、启动线程 2. 其他创建线程方式 创建线程后自动启动线程[NSThread detac...

  • iOS 多线程开发

    一、NSThread 1、创建和启动线程 2、其他创建线程方式 上述2种创建线程方式的优缺点优点:简单快捷缺点:无...

  • 多线程编程

    创建线程 创建线程的三种方式 创建方式Threadclass继承Thread类(重点)Runnable接口实现Ru...

网友评论

      本文标题:JDK5.0新增创建线程的方式

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