V get(Long timeout,TimeUnit unit):获取异步执行结果,如果没哟结果可用,此方法会阻塞,但是会有时间限制,如果阻塞时间超过设定的timeout时间,该方法将抛出异常;
boolean isDone():如果任务执行结束,无论是正常结束或是中途取消还是发生异常,都返回true;
boolean isCanceller():如果任务完成前被取消,则返回true;
boolean cancel(boolean mayInterrupRunning):如果任务还没有开始,执行cancel方法将返回false;如果任务已经启动,执行cancel方法将以中断执行此任务线程的方式来试图停止任务,如果停止成功,返回true;
当任务已经启动,执行cancel(false)方法将不会对正在执行的任务线程产生影响(让线程正常执行到完成),此时返回false;
当任务已经启动,执行cancel方法将返回false,MayInterruptRunning参数表示是否中断执行中的线程;
实际上Future提供了三种功能:
1.能够中断执行中的任务;
2.判断任务是否执行完成;
3.获取任务执行完成后的结果;
5.线程池创建的方式 5.1 newCachedThreadPoolnewCachedThreadPool:可缓存线程池,先查看池中有没有以前建立的线程,如果有,就直接使用;如果没有,就创建一个新的线程加入池中,缓存型池通常用于执行一些生存期很短的异步型任务;
package com.wn.threadpool; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class NewCachedThreadPoolTest { //无限大侠线程池,JVM自动回收 public static void main( String[] args ){ ExecutorService newCachedThreadPool = Executors.newCachedThreadPool(); for (int i=1;i<=10;i++){ newCachedThreadPool.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } }); } } }
5.2 newFixedThreadPoolnewFixedThreadPool:创建一个可重用固定个数的线程池,以共享的无界队列方式来运行这些线程;
package com.wn.threadpool; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class NewFixedThreadPoolTest { public static void main( String[] args ){ ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(3); for (int i=0;i<10;i++){ newFixedThreadPool.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } }); } } }
5.3 newScheduledThreadPoolnewScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行
package com.wn.threadpool; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class NewScheduledThreadPoolTest { public static void main( String[] args ) { ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(3); for (int i=0;i<10;i++){ newScheduledThreadPool.schedule(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } },3, TimeUnit.SECONDS); } } }
5.4 newSingleThreadExecutornewSingleThreadExecutor:创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行;
package com.wn.threadpool; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class NewSingleThreadExecutorTest { public static void main( String[] args ){ ExecutorService newSingleThreadExecutor = Executors.newSingleThreadExecutor(); for (int i=0;i<10;i++){ final int index=i; newSingleThreadExecutor.execute(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()+"正在被执行,index:"+index); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } }); } } }
6.Java当中线程状态有哪些6.1 初始状态(New):
线程对象创建出来后,没有调用start方法,线程处于初始状态;
6.2 运行状态:
1.就绪状态(Ready):调用了Start方法,等待CPU分配资源;
2.运行状态(RUNNING):CPU分配资源给该线程,该线程处于运行状态;
6.3 阻塞状态 (BLOCKED):