多线程执行顺序
我们创建两个线程,让奇数线程输出奇数,偶数线程执行输出偶数。
先来看看代码实现:
package Test;
import org.ietf.jgss.Oid;
public class ThreadNum extends Thread{
private int first;
public ThreadNum(String name,int first) {
super(name);
this.first=first;
}
public void run() {
System.out.print("当前执行线程是:"+this.getName()+" ");
for(int i=first;i<50;i+=2) {
System.out.print(i+"\t");
}
System.out.println(this.getName()+"结束");
}
public static void main(String[] args) {
System.out.println("当前的线程是"+Thread.currentThread().getName());
ThreadNum odd=new ThreadNum("奇数线程", 1);
ThreadNum even=new ThreadNum("偶数线程", 2);
odd.start();
even.start();
System.out.println("当前活动的线程是"+Thread.activeCount());
}
}
我们新建了一个类继承线程,重写了run的方法。开始跑线程的时候先输出线程名称,再输出对应的奇数或者偶数。
线程执行完之后会输出线程执行结束。
看看运行的结果。
可以看到输出完当前的线程是main之后,执行当前活动的线程是3并没有执行输出当前执行的线程是:奇数线程
这是因为多线程是异步执行,输出活动线程的语句并不会等待其他线程执行。而且开启线程需要一定的时间。
所以会先执行当前活动的线程是3然后先执行奇数线程或者先执行偶数线程并没有严格的顺序,这是由操作系统
调度的。输出当前线程是奇数线程后立即切换第二个线程,输出当前线程是偶数线程。然后每次输出一个数之
后切换线程。由于线程切换的速度快的话,所以会出现上面的情况。线程切换速度快慢与cpu处理速度和多核有关。
想要在线程执行之后输出当前活动线程,在前面加上join就ok了。