问题描述:

现有3个线程thread1, thread2, thread3。这3个线程是并发执行的,当着3个线程都执行完成以后,需要执行一个finish()事件。

实现方法:

1/**定义一个静态标记**/2privatestaticbytenbTemp=0;34privatevoidaa(){5//线程16Threadthread1=newThread(newRunnable(){7@Override8publicvoidrun(){9//...10bb();11}12});13//线程214Threadthread2=newThread(newRunnable(){15@Override16publicvoidrun(){17//...18bb();19}20});21//线程322Threadthread3=newThread(newRunnable(){23@Override24publicvoidrun(){25//...26bb();27}28});2930thread1.start();31thread2.start();32thread3.start();33}3435/**注意:要添加关键字“synchronized”,否则会先同时操作bb()方法*/36privatesynchronizedvoidbb(){37nbTemp++;38if(nbTemp==(byte)3){39finish();//条件达成,执行finish();40}41}

我们回到APP上,在APP启动时,我们会先启动Splash,会在Splash中做一些预加载。那么由于网速等等原因,导致预加载的时间不太固定。那么我们既不希望他加载的过快,会导致页面的存在感不强;也不希望加加载过慢,误以为“卡死”。那么我们就需要设置一个最小加载时间和最大加载时间。那么如何时间呢?

nbTemp=0Threadthread1=Thread(Threadthread2=Thread(Threadthread3=Thread(nbTemp++finish();}