run 方法是方法的调用 先去运行run方法里面的 运行完了
在运行main方法里面的代码
但是start 方法是Thread 继承的方法
他可以分支两条线程
一条是run方法
一条是main 主方法
线程3个启动方式
1.extends Thread
重写run 方法 new Thread ().start(); 直接启动
2. implements Runable接口
实现run方法 而且 new Thread(new MyRun).start();
需要将对象传入Thread里面
new Thread(()->{
system.out.print("231")
}).start
3通过线程池启动
线程的三个方法
sleep 让睡眠的线程不执行 让其他线程执行
yield 谦让 当正在cpu运行的线程调用yield 方法时 会谦让其他线程 自己回到等待队列
有可能下次还是自己运行
join 两个线程 t1,t2 如果在t1的某个点上调用t2.join
t1就会等待t2运行完了在继续运行
线程的三种状态
new 当我们new Thread 但是还没有调用start 方法时是new 状态
当调用start 方法时 是runable 状态
runable 状态包含两个状态
1 ready 就绪状态 在CPU等待队列中 等待CPU去调度
2 running 正在运行的线程
当调用yield 方法时会从running 到yeild状态
teminated 线程结束 线程死亡
Block :只有调用syc 等待进入同步代码块的锁 没有的到锁的时候 Block 状态
获得到锁的时候是ready就绪状态
waiting 调用wait join park 进入ready状态
timewaiting 过一段时间 在进入ready状态