沪-飏的gravatar头像
沪-飏 2014-08-05 17:02:54

java多线程编程实例教程源代码学习(原创)

代码里面有注释

这里涉及到了几个知识点 

1.future 模式

2.Callable 和 Runable 之间的区别

3.FutureTask 的用法

4.线程池

package thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;

/**
 * JdkDemo : TestExecutorService.java
 * 
 * @date 2014-8-5
 * @author Meng
 * @version
 * 
 */
public class TestExecutorService1 {

	// 初始化线程池
	static ExecutorService executorService = Executors.newFixedThreadPool(100);

	/**
	 * @param args
	 * @throws InterruptedException
	 * @throws ExecutionException
	 */
	public static void main(String[] args) throws InterruptedException,
			ExecutionException {

		Future<?> future1, future2;

		// 1. 提交任务 runnable , future 获取线程执行结果
		future1 = executorService.submit(new ConsumerThread1());

		// 2. 提交任务 callable , future 获取线程执行结果
		future2 = executorService.submit(new ConsumerThread2());

		// 3. 提交任务 FutureTask 
		FutureTask<String> task3 = new FutureTask<String>(new ConsumerThread3());
		executorService.submit(task3);

		System.out.println("------------task1 执行结果------------");
		// 此处因为调用了 get 方法 , 主线程会等待子线程完成
		System.out.println(String.format("result [%s]", future1.get()));
		System.out.println("\n");

		System.out.println("------------task2 执行结果------------");
		System.out.println(String.format("result [%s]", future2.get()));
		System.out.println("\n");

		System.out.println("------------task3 执行结果------------");
		System.out.println(String.format("result [%s]", task3.get()));
		System.out.println("\n");

		executorService.shutdown();
		System.out.println("结束");
	}
}

/**
 * JdkDemo :
 * TestExecutorService.java
 * 实现 Runnable 接口 , future 模式 无法获取返回结果 
 * @date 2014-8-5
 * @author Meng
 * @version
 * 
 */
class ConsumerThread1 implements Runnable {
	public void run() {
		System.out.println("task1 start");
		for (int i = 0; i < 4; i++) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
			}
			System.out.println(this.getClass().toString() + "-->" + i);
		}
		System.out.println("task1 end");
	}
}

/**
 * JdkDemo :
 * TestExecutorService.java
 * 实现 Callable 接口 , 可以抛出异常 , 可以存在返回值 
 * @date 2014-8-5
 * @author Meng
 * @version
 * 
 */
class ConsumerThread2 implements Callable<String> {
	public String call() throws Exception {
		System.out.println("task2 start");
		for (int i = 0; i < 4; i++) {
			Thread.sleep(1000);
			System.out.println(this.getClass().toString() + "-->" + i);
		}
		System.out.println("task2 end");
		return "done";
	}
}

/**
 * JdkDemo :
 * TestExecutorService.java
 * 实现 Callable 接口 , 可以抛出异常 , 可以存在返回值 
 * @date 2014-8-5
 * @author Meng
 * @version
 * 
 */
class ConsumerThread3 implements Callable<String> {
	public String call() throws Exception {
		System.out.println("task3 start");
		for (int i = 0; i < 4; i++) {
			Thread.sleep(1000);
			System.out.println(this.getClass().toString() + "-->" + i);
		}
		System.out.println("task3 end");
		return "done";
	}
}

打赏

文件名:TestExecutorService1.java,文件大小:3.232K 下载
最代码最近下载分享源代码列表最近下载
lyn520  LV3 2022年4月14日
2469095052  LV8 2021年12月30日
融会贯通  LV3 2021年12月9日
猴哥猴哥  LV12 2021年6月15日
yyblmxl  LV1 2021年4月25日
花椒谢霆锋  LV8 2021年3月15日
zhenghongixin4065  LV9 2021年1月25日
lll111  LV16 2020年7月17日
liuyilin9608  LV15 2020年5月17日
风笑天  LV2 2020年5月10日
最代码最近浏览分享源代码列表最近浏览
dapeng0011  LV13 2月24日
猴哥猴哥  LV12 2023年7月31日
浪里格朗  LV4 2023年1月31日
MoonSight  LV1 2022年7月1日
lingqianjue  LV3 2022年6月14日
liys1234  LV9 2022年4月27日
lyn520  LV3 2022年4月14日
罐瓶  LV2 2022年2月27日
一道念  LV10 2022年1月29日
dongzhan  LV12 2021年12月15日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友