关于线程的常见方法

Start只一次 启动到就绪, start是开启父线程去执行run方法
Run 直接调用由主线程运行
Join 等待线程结束,获得线程结果
Getid/getname/setname thread
Get/setpriority
Getstatus
isinterrupted 有没被打断过
isAlive 活着么
Interrupt/interrupted 动作
currentThread 获取当前线程
Sleep
yield 礼让

查看源码去!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Start vs run 直接run是main线程执行的, 没有达到异步的目的///start才是创建一个新线程执行
Sleep vs yield

Thread.sleep在哪调用就sleep哪 从 running->timed waiting
建议用TimeUnit.seconds.sleep(timeout) === Thread.sleep()

image1

| sleep实现防止cpu占用100% | image2 | |----|----|
Join main中写t1.join(),那么主线程会等待这行代码执行完,才会往下走
Join(long n)

等待该线程走完, 最多等待n秒, n秒后直接向下走,不等了

也就是说thread=sleep(2s),sout("nihao")
main= thread1.start(),thread.join(1.5)则不会打印nihao,因为不等了

Sleep,wait,join被打断后会抛出异常,并且重置isinterrupted的状态为false
抛异常 = 已处理 = 状态复位。

main线程执行t1.interrupt(),
那么此时t1.isInterrupt()会设置为true,
T1线程可以根据isInterrupt自行判断是否需要结束自己