Java 8 并发编程
2024-10-02 03:45:12
Java 1.5前
并发实现
- Java Green Thread
java 1.2 前的线程受os内核限制, 线程=进程, 绿色线程是JVM调度, 用来模拟多线程环境. 不需要本地线程支持.
- Java Native Thread
对比
绿色线程在线程激活和线程同步方面优于本地线程
在I/O和上下文操作方面性能要低于本地线程
编程模型
- Thread
- Runnable
局限性(后续版本将解决完善这部分缺陷, 可对比学习)
- 缺少线程管理的原生支持(缺少线程池)
- 缺少"锁"API(只有 synchronized 关键字)
- 缺少执行完成的原生支持
变通的实现方式:
public static void main(String[] args){
CompletableRunnable runnable = new CompletableRunnable();
Thread thread = new Thread(runnable,"Sub");
thread.start();
thread.join(); //此处阻塞主线程等待Sub完成, 否则得到的结果不准确
System.out.printf("[Thread: %s] is running\n", Thread.currentThread.getName());
System.out.printf("Sub Thread is completed, result is %s\n", runnable.getCompleted());
}
private static class CompletableRunnable implements Runnable{
private volatile boolean completed = false;
@Override
public void run(){
System.out.printf("[Thread: %s] is running\n", Thread.currentThread.getName());
completed = true;
}
public boolean getCompleted(){
return completed;
}
}
- 执行结果获取困难
- Double Check Locking 不确定性 (单例模式)
Java 5
并发框架
- J.U.C
编程模型
- Executor, Execurtors, ExecutorService 等
- Runnable , Callable
- Future
Java 7
并行框架
- Fork/Join
编程模型
- ForkJoinPool
- ForkJoinTask
- RecursiveAction
Future (Java 5 引入) 限制
- 无法手工完成
- 阻塞式结果返回
- 无法链式多个Future
- 无法合并多个Future的结果
- 缺少异常处理
Java 8
异步并行框架
- Fork/Join
编程模型
- CompletionStage
- CompletableFuture
其他框架
- Spring 和 Guava 使用不同的
ListenableFuture
最新文章
- logstash+elasticsearch+kibana管理日志(安装)
- 李炎恢《PHP第二季视频教程》之总结
- IOS开发基础知识--碎片18
- 从C#到Objective-C
- 【设计模式】Java版设计模式的类图汇总
- 个人对joomla3.2x和joomla2.5X浅薄看法
- Python自然语言工具包(NLTK)入门
- Android RecyclerView使用详解(二)
- git push冲突解决
- opencv 手写选择题阅卷 (三)训练分类器
- PopupWindow 问题集锦
- RC522 射频读卡器模块(MINI型)
- Uniconnection 连 mysql 有时会断线的
- java实现的快速排序算法
- 利用angular控制元素的显示和隐藏
- exists,in的区别-mysql
- vetur插件提示 [vue-language-server] Elements in iteration expect to have 'v-bind:key' directives错误的解决办法
- POJ 3278 抓奶牛(BFS入门题)
- BootstrapValidator . select 必须选择一个 .callback . select .option
- React 入门学习笔记整理(九)——路由