start()和run()的区别

版权声明:未经博主同意,禁止转载,联系方式qq2928013321 https://blog.csdn.net/weixin_42130471/article/details/82818037

本方法通过实现runnable接口来实现多线程,刚开始被run()和start()搞糊涂了,后来看了很多博客,稍有感悟。所以写一下自己的理解。start()方法让一个线程进入就绪队列等待分配cpu,分到cpu后才调用实现的run()方法。

若不使用start()直接在main方法中直接使用run()方法, 比如下面程序的前两种情况,因为没有开辟新的线程,所以当前线程是main线程,而第三种情况,开辟了一个新线程且线程名我们设置为了“新线程”,在cpu执行新线程时会调用run()方法。

package javaNewThread;
public class test1main {
	public static void main(String[] args) {
		runnable runner=new runnable();
		Thread th1= new Thread(runner,"新线程");
		
//区分以下三种情况
        
        //1
		System.out.println("th1.run():");
		th1.run();
		//2
		System.out.println("runner.run():");
		runner.run();
		//3
		System.out.println("th1.start():");
		th1.start();
	}
}
public class runnable implements Runnable{
	private int food=10;
	public void run() {
		for(int i=0;i<3;i++) {
			System.out.println("线程名:"+Thread.currentThread().getName()+" food:"+food--);
		}
	}
}

结果:

th1.run():
线程名:main food:10
线程名:main food:9
线程名:main food:8
runner.run():
线程名:main food:7
线程名:main food:6
线程名:main food:5
th1.start():
线程名:新线程 food:4
线程名:新线程 food:3
线程名:新线程 food:2

------------交换123的顺序,查看运行结果

接下来我把3放到1和2前面执行,发现新线程的run()还是最后执行,说明它在就绪队列中排队,并没有这么快执行。而当前正在执行mian线程,每个线程执行都有一个时间片,main线程时间片还没结束,所以23先执行了。等main线程时间片用完,再执行新线程。

package javaNewThread;
public class test1main {
	public static void main(String[] args) {
		runnable runner=new runnable();
		Thread th1= new Thread(runner,"新线程");
		
        //1,原来的3
		System.out.println("th1.start():");
		th1.start();
	    //2
		System.out.println("th1.run():");
		th1.run();
		//3
		System.out.println("runner.run():");
		runner.run();
	}
}
package javaNewThread;

public class runnable implements Runnable{
	private int food=10;
	public void run() {
		for(int i=0;i<3;i++) {
			System.out.println("线程名:"+Thread.currentThread().getName()+" food:"+food--);
		}
	}
}

运行结果:

th1.start():
th1.run():
线程名:main food:10
线程名:main food:9
线程名:main food:8
runner.run():
线程名:main food:7
线程名:main food:6
线程名:main food:5
线程名:新线程 food:4
线程名:新线程 food:3
线程名:新线程 food:2

猜你喜欢

转载自blog.csdn.net/weixin_42130471/article/details/82818037