常见方法
start与run
直接调用run是在主线程中执行了run方法,没有启动新的线程
使用start是启动新的线程,通过新的线程间接执行run中的代码
sleep与yield
1、调用sleep会让当前线程从Running进入Timed Waiting状态(阻塞)
2、其他线程可以使用interrupt方法打断正在睡眠的线程,这个时候sleep方法会抛出InterruptedException
3、睡眠结束后的线程未必会立刻得到执行
4、建立使用TimeUnit的sleep代替Thread的sleep来获得更好的可读性
1、调用yield会让当前线程从Running进入Runnable就绪状态,然后调度执行其他线程
2、具体的实现依赖于操作系统单额任务调度器
线程优先级
1、线程优先级会提示调度器优先调度该线程,但是它仅仅是一个提示,调度器可以忽略它
2、如果cpu比较忙,那么优先级高的线程会获得更多的时间片,但是cpu闲时,优先级几乎没作用
join方法详解
哪个线程调用了join方法,就必须得等待哪个线程运行结束。
如果以上程序的结果一定要输出r的结果为10,那么就表示t1这个线程要先于主线程中的输出语句结束,这个时候在t1.start()后面添加t1.join()语句就可以了。