多线程执行顺序

                                                   多线程执行顺序

我们创建两个线程,让奇数线程输出奇数,偶数线程执行输出偶数。

先来看看代码实现:

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了。

猜你喜欢

转载自blog.csdn.net/qq_43279637/article/details/84336330