首页 > 代码库 > 预处理线程问题解决方案
预处理线程问题解决方案
问题描述:
现有3个线程thread1, thread2, thread3。这3个线程是并发执行的,当着3个线程都执行完成以后,需要执行一个finish()事件。
实现方法:
1 /** 定义一个静态标记 **/ 2 private static byte nbTemp = 0; 3 4 private void aa(){ 5 // 线程1 6 Thread thread1 = new Thread(new Runnable() { 7 @Override 8 public void run() { 9 // ...10 bb();11 }12 });13 // 线程214 Thread thread2 = new Thread(new Runnable() {15 @Override16 public void run() {17 // ...18 bb();19 }20 });21 // 线程322 Thread thread3 = new Thread(new Runnable() {23 @Override24 public void run() {25 // ...26 bb();27 }28 });29 30 thread1.start();31 thread2.start();32 thread3.start();33 }34 35 /** 注意:要添加关键字“synchronized”,否则会先同时操作bb()方法 */36 private synchronized void bb(){37 nbTemp ++;38 if(nbTemp == (byte)3) {39 finish(); // 条件达成,执行finish();40 }41 }
我们回到APP上,在APP启动时,我们会先启动Splash,会在Splash中做一些预加载。那么由于网速等等原因,导致预加载的时间不太固定。那么我们既不希望他加载的过快,会导致页面的存在感不强;也不希望加加载过慢,误以为“卡死”。那么我们就需要设置一个最小加载时间和最大加载时间。那么如何时间呢?
nbTemp = 0 Thread thread1 = Thread( Thread thread2 = Thread( Thread thread3 = Thread( nbTemp ++ finish(); }
预处理线程问题解决方案
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。