1、首先创建方法时会执行run方法
run就是线程运行的代码块
2、start 方法让线程处于就绪状态,抢占到CPU资源后就会处于运行状态
start 与 run方法对比,start让线程处于就绪状态,run是要执行的代码,那么能否直接调用run呢?答案是可以的,但是此时和一般类new出对象后调用方法没有两样,Thread.currentThread()放到run中就会发现和当前线程ID一致,调用start后打印出的线程id就会改变
3、currentThread获取当前线程信息
4、sleep线程休眠,参数就是要休眠的时间,但不会释放资源(锁)
5、wait (Object中方法)线程阻塞,线程会放入到waitSet集合中,直到调用notify/notifyAll
6、yield当前线程进入就绪状态,重新竞争CPU资源,不常用
7、join等待调用线程的时间(结束)
8、interrupt改变标识状态,具体实现要看线程中如何实现,如在循环中调用
9、interrupted清除线程的中断状态,连续调用两次会返回false
10、isInterrupted线程是否已中断
11、enumerate 将活动线程复制到指定数组,SDK注释中建议该方法仅用于监视和调试
12、线程的优先级、线程名称等比较好理解就不多说了
13、Runnable、 Future、Callable
Callable获取Future对象,具体可看下submit中的调用过程