Java CompletableFuture(1)
Java CompletableFuture(1)
private Long longTimeWork() {
try {
//模拟耗时操作,特意阻塞5秒。
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
return System.currentTimeMillis();
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("时间1:" + System.currentTimeMillis());
CompletableFuture<Long> future = CompletableFuture.supplyAsync(() -> longTimeWork());
System.out.println("时间2:" + System.currentTimeMillis());
Future<Long> f = future.whenComplete((v, a) -> {
System.out.println("时间3:" + System.currentTimeMillis());
System.out.println("v: " + v);
System.out.println("a: " + a);
System.out.println("时间4:" + System.currentTimeMillis());
});
System.out.println("时间5:" + System.currentTimeMillis());
}
输出:
06-12 16:28:23.157 4686-4686/zhangphil.test I/System.out: 时间1:1528792103157
06-12 16:28:23.161 4686-4686/zhangphil.test I/System.out: 时间2:1528792103161
06-12 16:28:23.162 4686-4686/zhangphil.test I/System.out: 时间5:1528792103162
06-12 16:28:28.164 4686-4710/zhangphil.test I/System.out: 时间3:1528792108164
06-12 16:28:28.165 4686-4710/zhangphil.test I/System.out: v: 1528792108164
a: null
时间4:1528792108165

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Java并发编程笔记之ReentrantLock源码分析
ReentrantLock是可重入的独占锁,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞后放入该锁的AQS阻塞队列里面。 首先我们先看一下ReentrantLock的类图结构,如下图所示: 从类图可以知道,ReentrantLock最终还是使用AQS来实现,并且根据参数决定内部是公平锁还是非公平锁,默认是非公平锁。 首先我们先看ReentrantLock源码,看到其构造函数及其参数,这是决定内部是公平锁还是非公平锁,如下源码所示: public ReentrantLock() { sync = new NonfairSync(); } public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync(); } 其中类Sync直接继承自AQS,它的子类NonfairSync和FairSync分别实现了获取锁的公平和非公平策略。 在这里AQS的状态值state代表线程获取该锁的可重入次数,默认情况下state的值为0,标示当前锁没有被任何线程持有,当一个线程第一次获取该锁的...
-
下一篇
Python 使用 pygame 实现一个简单的动画
首先安装pygame库: $ sudo pip install pygame 测试安装效果: #导入pygame模块 import pygame #初始化pygame pygame.init() #创建舞台,利用Pygame中的display模块,来创建窗口 screen = pygame.display.set_mode((640,480),0,32) #设置窗口标题 pygame.display.set_caption("Hello PyGame") 这个时候大家运行就能得到一个窗口但是窗口一闪而过。 #导入pygame模块 import pygame #初始化pygame pygame.init() #创建舞台,利用Pygame中的display模块,来创建窗口 screen = pygame.display.set_mode((640,480),0,32) #设置窗口标题 pygame.display.set_caption("Hello PyGame") while 1: for event in pygame.event.get(): #这段程序大家可能比较费解,实际上是检...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 面试大杂烩
- MySQL数据库在高并发下的优化方案
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS关闭SELinux安全模块
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果