多线程并行请求问题及SplashActivity预加载问题解决方案
1. 问题描述(一):
现有3个线程thread1, thread2, thread3。这3个线程是并发执行的,当着3个线程都执行完成以后,需要执行一个finish()事件。
1.1 实现方法:
/** 定义一个静态标记 **/
private static byte nbTemp = 0; private void aa(){
// 线程1
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
// ...
bb();
}
});
// 线程2
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
// ...
bb();
}
});
// 线程3
Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
// ...
bb();
}
}); thread1.start();
thread2.start();
thread3.start();
} /** 注意:要添加关键字“synchronized”,否则会先同时操作bb()方法 */
private synchronized void bb(){
nbTemp ++;
if(nbTemp == (byte)3) {
finish(); // 条件达成,执行finish();
}
}
1.2 其他实现方式:
2. 问题描述(二):
我们回到APP上,在APP启动时,我们会先启动Splash,会在Splash中做一些预加载。那么由于网速等等原因,导致预加载的时间不太固定。那么我们既不希望他加载的过快,会导致页面的存在感不强;也不希望加加载过慢,误以为“卡死”。那么我们就需要设置一个最小加载时间和最大加载时间。那么如何时间呢?
/** 定义一个静态标记 **/
private static byte nbTemp = 0;
/** 开始时候的时间戳 **/
private long nlStartTime;
/** 最大时间戳 **/
private long nlMaxTime;
/** finish()方法标记,防止多次执行 **/
private boolean isFirst;
/** 最小等待时间 **/
private short nsMinTime = 3000;
/** 最大等待时间 **/
private short nsMaxTime = 6000; private void aa(){
// 线程1
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
// ...
bb();
}
});
// 线程2
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
// ...
bb();
}
});
// 线程3
Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
// ...
bb();
}
}); Thread threadTimeManager = new Thread(new Runnable() {
41 @Override
public void run() {
while(ture) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
nlStartTime += 1000;
if(nlCurrentTime < nlStartTime) {
nbTemp = 3;
50 bb();
51 return;
52 }
53 }
54 }
55 }); // 记录当前时间
nlStartTime = System.currentTimeMillis();
nlCurrentTime = nlStartTime - nsMaxTime + 1; // 最大间隔6s;
isFirst = true; thread1.start();
thread2.start();
thread3.start();
threadTimeManager.start();
} /** 主要要添加关键字“synchronized”,否则会先同时操作bb()方法 */
private synchronized void bb(){
nbTemp ++;
if(nbTemp > (byte)2 && isFirst) {
isFirst = false;
long nlEnd = nsMinTime + nlStartTime - System.currentTimeMillis();
if(nlEnd > 0 && nlEnd < nsMinTime) {
try {
76 Thread.sleep(nlEnd);
} catch (InterruptedException e) {}
78 } finish(); // 条件达成,执行finish();
}
}
多线程并行请求问题及SplashActivity预加载问题解决方案的更多相关文章
- 使用FluentScheduler和IIS预加载在asp.net中实现定时任务管理
FluentScheduler介绍 github地址:https://github.com/fluentscheduler/FluentScheduler FluentScheduler是一个简单的任 ...
- InnoDB缓冲池预加载在MySQL 5.7中的正确打开方式
InnoDB缓冲池预加载在MySQL 5.7中的正确打开方式 https://mp.weixin.qq.com/s/HGa_90XvC22anabiBF8AbQ 在这篇文章里,我将讨论在MySQL 5 ...
- Javascript图片预加载详解
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...
- IIS初始化(预加载),解决第一次访问慢,程序池被回收问题
你以为你可以慢,那是不可能的!你以为你可以不动,那也是不可能的! 河南是守株待兔故事情节的发源地,讲的是懒惰的农夫坐在树桩旁等待可爱的小毛兔撞树的故事,那么这种事情怎么可能天天出现呢!你以为的事并一定 ...
- ViewPager+Fragment取消预加载(延迟加载)(转)
原文:http://www.2cto.com/kf/201501/368954.html 在项目中,都或多或少地使用的Tab布局,所以大都会用到ViewPager+Fragment,但是Fragmen ...
- js图片预加载
图片预加载有大体有几种方式 1.html标签或css加载图片. 显而易见我们使用img标签或者通过标签的background-image属性都可以实现图片的预加载.但是为了避免初次载入过多图片影响体验 ...
- 利用简洁的图片预加载组件提升h5移动页面的用户体验
在做h5移动页面,相信大家一定碰到过页面已经打开,但是里面的图片还未加载出来的情况,这种问题虽然不影响页面的功能,但是不利于用户体验.抛开网速的原因,解决这个问题有多方面的思路:最基本的,要从http ...
- ASP.NET MVC3 Razor 调试与预加载
目录(?)[-] 获取服务器信息 FormsAuthenticationSlidingExpiration 属性 MVC3预加载 在ASP.NET MVC3开发中,调试中怎么也是不可缺少的,那对于 ...
- JS实现图片预加载无需等待
网站开发时经常需要在某个页面需要实现对大量图片的浏览;用javascript来实现一个图片浏览器,让用户无需等待过长的时间就能看到其他图片 网站开发时经常需要在某个页面需要实现对大量图片的浏览,如果考 ...
随机推荐
- 基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (补充篇)
前言 在上一篇导出文档番外篇中,我们已经熟悉了怎样根据json数据导出word的文档,生成接口文档,而在这一篇,将对上一篇进行完善补充,增加多种导出方式,实现更加完善的导出功能. 回顾 1. 获取Sw ...
- android注册验证码的使用
主要是创建了验证码的生成类. 通过此生成类,与imageview相互联系起来,实现验证码显示.并添加点击事件,实现验证码的切换. 实验的截图如下:(验证码可以点击切换) 具体的关于验证码的生成类如下: ...
- Python 类属性和方法
import types class Dog(object): __slots__ = ("name", "color", "info") ...
- JAVA中String和StringBuilder类的特点及使用
转自:https://www.imooc.com/code/2202 仅做个人学习记录之用,侵删! 什么是 Java 中的字符串 在 Java 中,字符串被作为 String 类型的对象处理. Str ...
- 21.1 Math(数学运算)方法使用 、工具类
package day21_static.meathDemo; //Math: 包含一些基本的数学运算方法 //从api中搜Math,它都用的static修饰. public class MethDe ...
- tf.train.MomentumOptimizer 优化器
tf.train.MomentumOptimizer( learning_rate, momentum, use_locking=False, use_nesterov=False, name='Mo ...
- 怎么搭建python环境?很简单,就几步的事
现在学习python的人越来越多了,而学习python必备的就是搭建python环境,那么,到底怎么搭建python环境呢? 首先,你需要有安装包,这个去官网下载就可以了,如果不会的话,可以看文章底部 ...
- 快速搭建网站信息库(小型Zoomeye)
前言:本来是不想重复造车轮的,网上资料有开源的fofa,和一些设计.有的架设太复杂了,好用东西不会用,整个毛线.还有的没有完整代码. 设计方案: 测试平台:windows 测试环境:php ...
- python爬虫实例,一小时上手爬取淘宝评论(附代码)
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 1 明确目的 通过访问天猫的网站,先搜索对应的商品,然后爬取它的评论数据. ...
- php7.2.1+redis3.2.1 安装redis扩展(windows系统)
前提:已成功安装PHP环境和Redis服务 下面进入正题: 第一步,下载redis驱动扩展文件,注意:需要根据上面信息下载对应版本 https://windows.php.net/downloads/ ...