1.实现callable接口

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

 public class callableTest implements Callable {

     @Override
     public Object call() throws Exception {
         int num = 0;
         for (int i = 0; i <= 100; i++) {
             System.out.println(i);
             num+=i;
         }
         return num;
     }
 }
 class Test{
     public static void main(String[] args) throws ExecutionException, InterruptedException {
         callableTest callableTest = new callableTest();
         //使用Futre的唯一实现类FutureTask传入callable类型对象
         FutureTask futureTask = new FutureTask(callableTest);
         //使用thread启动线程
         Thread thread = new Thread(futureTask);
         thread.start();
         //使用get方法获取返回值,必须处理上级抛出异常
         Object o = futureTask.get();
         System.out.println(o);
     }
 }

2.使用线程池

Executable创建

newCachedThreadPool() 创建一个可根据需要创建新线程的线程池

newFixedThreadPool(n) 创建一个可重用固定线程数的线程池

newSinhleThreadExecutor() 创建一个只有一个线程的线程池

newSchedulecThreadPool() 创建一个线程池,它可安排在给固定延迟后运行命令或定期执行

execute 执行 适合使用于Runnable

submit 提交 适合使用于callable

shutdown 关闭连接池

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

 public class ThreadPoolTest implements Runnable{

     @Override
     public void run() {
         for (int i = 0; i <= 100; i++) {
             if(i%2==0){
                 System.out.println(i);
             }

         }
     }
 }
 class Tets{
     public static void main(String[] args) {
         //创建一个数量10的线程池
         ExecutorService executorService = Executors.newFixedThreadPool(10);
         //创建线程实现对象
         ThreadPoolTest threadPoolTest = new ThreadPoolTest();
         //执行线程
         executorService.execute(threadPoolTest);
         //关闭连线池
         executorService.shutdown();

     }
 }

corePoolSize 核心池大小

maximumPoolSize 最大线程数

KeepAliveTime 线程没有任务时最多保持多长时间后会终止

可是使用ThreadPoolExecutor类型强转使用方法

jdk5.0新增两个线程创建方法的更多相关文章

  1. 创建线程的方式三:实现Callable接口-----JDK5.0 新增

    package com.yhqtv.java2; /* * 创建线程的方式三:实现Callable接口-----JDK5.0 新增 * * 如何理解实现Callable接口的方式创建多线程比实现Run ...

  2. Thread之六:线程创建方法

    1.继承Thread类,重写该类的run()方法. 2.实现Runnable接口,并重写该接口的run()方法,该run()方法同样是线程执行体,创建Runnable实现类的实例,并以此实例作为Thr ...

  3. Day07 jdk5.0新特性&Junit&反射

    day07总结 今日内容 MyEclipse安装与使用 JUnit使用 泛型 1.5新特性 自动装箱拆箱 增强for 静态导入 可变参数方法 枚举 反射 MyEclipse安装与使用(yes) 安装M ...

  4. Linux线程-创建

    Linux的线程实现是在内核以外来实现的,内核本身并不提供线程创建.但是内核为提供线程[也就是轻量级进程]提供了两个系统调用__clone()和fork (),这两个系统调用都为准备一些参数,最终都用 ...

  5. Javaweb学习笔记——(七)——————myexlipse基本使用、jdk5.0新特性及反射讲解

    1.debug调试模式: *使用这种模式,调试程序(看到程序运行停止在这一行) -显示出来行号 -双击左边,出现一个圆点,表示设置了一个断点 *使用debug as方式,运行程序 -特使是否进入到调试 ...

  6. java_线程创建的两种方法

    线程创建的方法有两种: 一 继承Thread类: public class ThreadTest { public static void main(String[] args) { //4)在mai ...

  7. 创建线程的方式三:实现Callable接口 --- JDK 5.0新增

    /** * 创建线程的方式三:实现Callable接口. --- JDK 5.0新增 * * * 如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大? * 1 ...

  8. 一个类,有新增元素(add)和获取元素数量(size)方法。 启动两个线程。线程1向容器中新增数据。线程2监听容器元素数量,当容器元素数量为5时,线程2输出信息并终止

    方式一: /** * 两个线程要是可见的所以要加上votalile */public class Test_01 { public static void main(String[] args) { ...

  9. JDK 5.0 新增解决线程安全 Callable接口和线程池

    在jdk5.0后又新增了两种解决线程安全的问题 一: 实现Callable接口, 实现接口步骤: 1: 创建一个实现Callable接口的实现类 2: 实现Callable接口中的call()方法, ...

随机推荐

  1. repo+manifests+git方式管理安卓代码

    repo+manifests+git方式管理安卓代码 1.repo的获取 repo只是google用Python脚本写的调用git的一个脚本,主要是用来下载.管理Android项目的软件仓库.(也就是 ...

  2. mysql 数据库的名称不能以数字开头

    mysql  数据库的名称不能以数字开头

  3. java获取操作系统的MAC地址和硬盘序列号

    1.判断操作系统是Windows还是Linux private static Boolean isLinux() { String os = System.getProperty("os.n ...

  4. MFC project for a non-Unicode character set is deprecated

    error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must chang ...

  5. Linux 常用命令一 ls

    一.ls命令 用于查看目录下的文件信息. ls 当前目录下都有哪些文件: wang@wang:~$ ls examples.desktop workpalce 模板 图片 下载 桌面 tools 公共 ...

  6. P4357 [CQOI2016]K远点对(KDTree)

    传送门 又一次产生了KDTree本质就是爆搜的感觉-- 大概就类似于p4169,只不过是从最近点对变成了第\(k\)远点对 我们开一个小根堆,里面放\(k\)个元素,起初全为\(0\),然后每一次都把 ...

  7. [USACO 2012 Feb Gold] Cow Coupons【贪心 堆】

    传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=118 传送门2:http://www.lydsy.com/JudgeOn ...

  8. 题解报告:hdu1219AC Me

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1219 Problem Description Ignatius is doing his homewo ...

  9. shell脚本中定义路径变量出现的BUG

    =========================================================================== if 语句中的定义路径变量 引发命令的PATH路 ...

  10. [转]Windows Azure入门教学系列 (六):使用Table Storage

    本文转自:http://blogs.msdn.com/b/azchina/archive/2010/03/11/windows-azure-table-storage.aspx 本文是Windows ...