public static class T extends Thread{
private final String name
public T(String name){
this.name = name
}
@Override
public void run() {
super.run()
for(int i=0 i<1000i++)
System.err.println(name + "\t" + i)
}
}
public static void main(String[] args) throws Exception{
T t = new T("t1")
T t2 = new T("t2")
t.start()
t.join()
t2.start()
}
1、这里简单的做一个小demo,项目的结构如图所示,就一个文件即可。
2、使用for循环将num每次减一输出,这里是使用的是实现runnable接口。
4、然后运行我们的代码,在输出栏可以看到这里三个线程将num的值一起减到0。
5、让程序在执行for循环中的一次循环时只有一个线程 *** 作,如图所示 我们将其睡眠一个时间。
6、然后再次多次运行代码 你会看到三个线程都在不同占比的执行循环减 *** 作,如果将sleep中的数字增加到一定数值时,你会看到三个线程分布的越有序。
首先子线程必须由主线程启动,所以严格意义上的“子线程结束后再执行主线程”是不可能实现,你的意思应该是:主线程创建完子线程后,等待子线程退出,在继续执行。你的代码基本没有多大问题,只是 Join 方法位置放置不对。
thread1.Start()// 先启动所有子线程
thread2.Start()
thread3.Start()
thread4.Start()
thread5.Start()
thread1.Join() // 然后在等待子线程退出
thread2.Join()
thread3.Join()
thread4.Join()
thread5.Join()
你先前的代码:
thread1.Start() // 线程1 启动
thread1.Join()// 等待 线程1 退出,线程1 未退出前,后面代码无法执行
thread2.Start() // 以下代码,均同上所述。
thread2.Join()
thread3.Start()
thread3.Join()
thread4.Start()
thread4.Join()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)