java线程创建之Callable、线程池

it2023-06-21  67

/** * 创建线程方式三:实现Callable--JDK5.0新增 */ import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; //1.创建Callable实现类 class NumThread implements Callable{ //2.重写call() @Override public Object call() throws Exception { int sum = 0; for (int i = 1; i < 101; i++) { System.out.println(i); sum+=i; } return sum; } } public class ThreadNew { public static void main(String[] args) { //3.创建实现类对象 NumThread numThread = new NumThread(); //4.将实现类对象放在FutureTask构造器中 FutureTask futureTask = new FutureTask(numThread); //5.FutureTask对象放在Thread构造器中 new Thread(futureTask).start(); try { //6.get()返回值为FutureTask构造器参数Callable实现类重写的call()返回值 //如果不需要返回值,该步骤可以跳过 Object sum = futureTask.get(); System.out.println("从1加到100的和为:"+sum); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } /** * 创建线程方式四:使用线程池--JDK5.0新增 */ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; class NumberThread implements Runnable{ @Override public void run() { for (int i = 0; i <= 100; i++) { if (i % 2 == 0){ System.out.println(Thread.currentThread().getName()+":"+i); } } } } class NumberThread1 implements Runnable{ @Override public void run() { for (int i = 0; i <= 100; i++) { if (i % 2 != 0){ System.out.println(Thread.currentThread().getName()+":"+i); } } } } public class ThreadPool { public static void main(String[] args) { //1.提供指定线程数量的线程池 ExecutorService service = Executors.newFixedThreadPool(2); //2.执行指定的线程的操作,需要提供实现Runnable接口或Callable接口实现类的对象 service.execute(new NumberThread());//适合使用于Runnable service.execute(new NumberThread1());//适合使用于Runnable //service.submit();//适合使用于Callable //3.关闭连接池 service.shutdown(); } }
最新回复(0)