分析:主线程main,和子线程ToExtendThread交替执行,cpu在轮流执行。
将 for(intk=0;k<1000;k++){
System.out.println("我是main前"+k);
}
Main方法中第一个for循环执行完后,子线程和main方法的第二个for循环并发,交替执行。
并发的特性:
随机性:随抢到cpu的执行权,谁就执行。
发现运行的结果每一次都不同,因为多个线程都获取cpu的执行权,cup到底执行到谁,谁就执行。明确一点,在某一个时刻,只能有一个程序运行。(多核除外),cpu在坐着快速的切换,以达到看上去是同时运行的效果.
为何要重写run方法:
Run方法是存储要运行的代码。让自定义的代码存在run方中,让线程调用。
将start()替换为run方法后,可以看到,第一个for,子线程,第二个for变成了顺序执行。变成了单线程,第一个for执行完,然后子线程执行,最后第二个for执行,失去了并发特性。
Run:仅仅是对象调用方法,线程创建了并没有执行;
Start:开启线程并执行该线程的run方法;
多线程的状态:
就绪:获得执行资格,没有得到cpu执行权;
运行:获得执行资格,得到cpu执行权;
阻塞:放弃执行资格。