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条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Red5直播服务器,属于Java语言的直播服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16