在java中不使用join()一个接一个地启动线程
Posted
技术标签:
【中文标题】在java中不使用join()一个接一个地启动线程【英文标题】:start thread one by one without using join() in java 【发布时间】:2017-10-26 13:47:51 【问题描述】:我是java线程的新手,我对线程有一点了解,假设我有10个线程,我像这样一个一个地启动它
public class BaseRunnable implements Runnable
String ThreadNo;
public BaseRunnable(String ThreadNo)
// TODO Auto-generated constructor stub
this.ThreadNo=ThreadNo;
@Override
public void run()
// TODO Auto-generated method stub
for(int i=0;i<50;i++)
System.out.println("Thread no "+ThreadNo+" Running with index > "+i);
在主方法中
BaseRunnable runnable=new BaseRunnable("1");//run on main thread
BaseRunnable runnableTwo=new BaseRunnable("2");//run on main thread
BaseRunnable runnable3=new BaseRunnable("3");//run on main thread
BaseRunnable runnable4=new BaseRunnable("4");//run on main thread
BaseRunnable runnabl5=new BaseRunnable("5");//run on main thread
BaseRunnable runnable6=new BaseRunnable("6");//run on main thread
BaseRunnable runnable7=new BaseRunnable("7");//run on main thread
BaseRunnable runnable8=new BaseRunnable("8");//run on main thread
Thread one=new Thread(runnable);
Thread two=new Thread(runnableTwo);
Thread thr3=new Thread(runnable3);
Thread thr4=new Thread(runnable4);
Thread thr5=new Thread(runnabl5);
Thread thr6=new Thread(runnable6);
Thread thr7=new Thread(runnable7);
Thread thr8=new Thread(runnable8);
one.start();
two.start();
thr3.start();
thr4.start();
thr5.start();
thr6.start();
thr7.start();
thr8.start();
我知道如果我使用join()
,我可以一个一个地运行线程(one.start(); one.join();)
我尝试了另一种使用同步的方法,它使一个线程一个接一个地运行,但它不是按顺序运行的,所以任何专家都帮我激活这个,比如第一个线程,没有join()
的线程 2 等
请将此视为初学者的问题,请帮助
【问题讨论】:
如果有几个任务要做,但是这些任务必须按照一定的顺序完成,并且直到前一个任务完成才能开始下一个任务,那你为什么要尝试使用线程?请提供更多关于您正在尝试做的事情的背景信息。 我正在测试和学习线程,最近我在面试中遇到了一个问题来实现这一点,所以我开始弄清楚如何做到这一点。请考虑作为学习的学生。谢谢 你还记得确切的面试问题吗?它真的和你发布的问题一样吗? This 已旧但仍然适用。 不应手动启动线程。看看Executors
。
【参考方案1】:
您可以通过这种方式实现您的目标:
List<BaseRunnable> list = new ArrayList<>();
for (int i = 0; i < 8; i++)
list.add(new BaseRunnable(Integer.toString(i)));
for (BaseRunnable baseRunnable : list)
Thread thread = new Thread(baseRunnable);
thread.start();
while (thread.isAlive())
Thread.sleep(10);
【讨论】:
以上是关于在java中不使用join()一个接一个地启动线程的主要内容,如果未能解决你的问题,请参考以下文章
Java Thread.join()详解--父线程等待子线程结束后再结束
Java——使用多线程从list中不重复地取出数据并进行处理,给多线程任务添加单项任务计时和总耗时