话说实现线程有两种方式,这个大家想必都知道吧,一个是实现Runnable接口,实现run方法,一个是继承Thread类,重写run方法,实现Runnable接口,还是需要包装到new Thread(runnable).start()来调用这个线程。我这里用继承Thread这种方式来介绍一下吧,因为业务需要,需要使用多线程来提高效率。
public class MyThread extends Thread{
private String para;
private String result;
public CameraThread(String para)
{
this.para=para;
}
public String getResult() {
return result;
}
@Override
public void run() {
result = execute(para);//自己定义的方法
}
}
实现主线程等待多个子线程可以使用sleep、join、CountDownLatch、CycleBarrier。众所周知,sleep()当前线程进入阻塞状态,指定时间后,解除阻塞,进入就绪状态,所以我觉得sleep不是很好控制,后面三种比较好用,具体你想用哪一种,就看你的业务场景吧!我这里介绍一下join这种方式吧!join()是阻塞指定线程,等到另一个线程完成后继续执行。
Vector<Thread> threads = new Vector<Thread>();//vector保证线程安全
for (int i=0;i<5;i++) {
MyThread myThread = new MyThread();
threads.add(myThread);//添加子线程
myThread.start();
}
//主线程等待子线程结束任务
for (Thread th:threads) {
try {
th.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
如果业务场景是主线程等待多个子线程执行,Runnable和Thread这个两种线程实现方法各有优缺点吧!Runnable无法获取线程运行结束的结果,而Thread可以获取成员变量来得到运行后的结果。
▄█▀█●老铁,站住!别跑,我又不收你钱,如果我的demo能够帮助到你,请给我一个赞吧!