首先调用run方法,只是单纯调用一个我们重写的run方法,不会创建一个线程,当前类也只作为一个普通类。
而调用start方法创建一个线程,start方法会先判断当前线程状态,如果是第一次调用,则会调用一个start0方法,是一个由native修饰的方法,底层有对应c语言写的API,调用会使操作系统状态转换为内核态,我们知道,只有内核态才能创建线程,所以调用start0会创建出一个线程。如果是第二次调用,在第一步判断时就会抛出一个异常,所以不能同时调用两次start方法。
首先调用run方法,只是单纯调用一个我们重写的run方法,不会创建一个线程,当前类也只作为一个普通类。
而调用start方法创建一个线程,start方法会先判断当前线程状态,如果是第一次调用,则会调用一个start0方法,是一个由native修饰的方法,底层有对应c语言写的API,调用会使操作系统状态转换为内核态,我们知道,只有内核态才能创建线程,所以调用start0会创建出一个线程。如果是第二次调用,在第一步判断时就会抛出一个异常,所以不能同时调用两次start方法。