第一个区别:调用start方法是开启一个新线程来执行,调用run方法是执行普通方法run,不开启新的线程
第二个区别:run方法又名线程体,里面包含具体要执行的业务代码,当调用时,如果当前线程时间片没有用完,会立刻执行run方法里的代码;而调用start方法时,是启动一个线程并把线程状态设置为就绪状态,并不会立即执行
第三个区别:run方法可以反复调用。start只能调用一次
扩展:为何start不能被反复调用?
当调用第一个start方法后,线程状态会从新建(new)状态变成就绪(runnable)状态,此时再次调用时,jvm就会判断当前线程已不在新建状态,所以会抛出异常(ThreadStateException 非法线程状态异常)