自从学习Java开始,多线程的问题就一直存在,不能很好的掌握,不能很好地运用,这也是把多线程放在复习最后的原因,根据我的经验,想一劳永逸的一次性学好某门技术是不可能的,多线程也是一样,先做一个大概,全面的认识,当在实际开发问题中遇见了问题再学习,那个时候学习理解和应用起来应该容易很多。
没想到在学习多线程的第一时间就遇到了问题,代码如下:
package thread;
public class ThreadTest3 extends Thread {
private int i=0;
public void run()
{
for(;i<100;i++)
{
System.out.println(getName()+" "+i);
}
}
public static void main(String[] args)
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+"oo "+i);
if(i==20)
{
System.out.println("创建线程1");
new ThreadTest3().start();
System.out.println("创建线程2");
new ThreadTest3().start();
}
}
}
}
这个代码是来自李刚的疯狂讲义,书虽然讲的很详细,但是对于线程1和线程2的创建顺序却忽略了。经过我多次实验,得到如下结论:
①,主程序,线程1和线程2交替执行
②主线程中是先创建线程1,接着创建线程2,注意:线程2不必等到线程1执行完毕才创建。
为什么我在开始理解的是先创建线程1,然后等到线程1执行完毕才创建线程2,然后执行?
原因是:我错误的认为执行线程与调用方法是一样的。