Java基础----线程池
2014-12-30 19:13
253 查看
package cn.itcast_08; public class MyRunnable implements Runnable { @Override public void run() { for (int x = 0; x < 100; x++) { System.out.println(Thread.currentThread().getName() + ":" + x); } } }
package cn.itcast_08; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /* * 线程池的好处:线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用。 * * 如何实现线程的代码呢? * A:创建一个线程池对象,控制要创建几个线程对象。 * public static ExecutorService newFixedThreadPool(int nThreads) * B:这种线程池的线程可以执行: * 可以执行Runnable对象或者Callable对象代表的线程 * 做一个类实现Runnable接口。 * C:调用如下方法即可 * Future<?> submit(Runnable task) * <T> Future<T> submit(Callable<T> task) * D:我就要结束,可以吗? * 可以。 */ public class ExecutorsDemo { public static void main(String[] args) { // 创建一个线程池对象,控制要创建几个线程对象。 // public static ExecutorService newFixedThreadPool(int nThreads) ExecutorService pool = Executors.newFixedThreadPool(2); // 可以执行Runnable对象或者Callable对象代表的线程 pool.submit(new MyRunnable()); pool.submit(new MyRunnable()); //结束线程池 pool.shutdown(); } }
package cn.itcast_10; import java.util.concurrent.Callable; /* * 线程求和案例 */ public class MyCallable implements Callable<Integer> { private int number; public MyCallable(int number) { this.number = number; } @Override public Integer call() throws Exception { int sum = 0; for (int x = 1; x <= number; x++) { sum += x; } return sum; } }
package cn.itcast_10; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /* * 多线程实现的方式3: * A:创建一个线程池对象,控制要创建几个线程对象。 * public static ExecutorService newFixedThreadPool(int nThreads) * B:这种线程池的线程可以执行: * 可以执行Runnable对象或者Callable对象代表的线程 * 做一个类实现Runnable接口。 * C:调用如下方法即可 * Future<?> submit(Runnable task) * <T> Future<T> submit(Callable<T> task) * D:我就要结束,可以吗? * 可以。 */ public class CallableDemo { public static void main(String[] args) throws InterruptedException, ExecutionException { // 创建线程池对象 ExecutorService pool = Executors.newFixedThreadPool(2); // 可以执行Runnable对象或者Callable对象代表的线程 Future<Integer> f1 = pool.submit(new MyCallable(100)); Future<Integer> f2 = pool.submit(new MyCallable(200)); // V get() Integer i1 = f1.get(); Integer i2 = f2.get(); System.out.println(i1); System.out.println(i2); // 结束 pool.shutdown(); } }
相关文章推荐
- 黑马程序员:Java基础总结----线程池及java5的线程并发库
- (Java 基础知识) Java线程池
- 【Java基础】Java多线程之线程组和线程池
- Java并发基础(二)-线程池基础
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- Java基础-创建Java程序中的线程池-Java基础-Java-编程开发
- Java线程和多线程(十二)——线程池基础
- JAVA基础(20) ExecutorService线程池讲解
- 不惑JAVA之JAVA基础 - 线程池
- JAVA基础拾遗-论线程池的线程粒度划分与深浅放置
- java基础——多线程(线程池)
- java.util.concurrent 学习笔记(2) 线程池基础
- java基础——多线程(线程池)
- Java基础--线程池的应用
- Java 基础之线程池的必要性
- 黑马程序员-Java基础加强之线程池
- java基础---Java---面试题---银行业务调度系统(线程同步锁、枚举、线程池)
- Java基础-线程池
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
- Java线程和多线程(十二)——线程池基础