一。建立线程
1.可以用一个Demo类继承Thread类,然后覆写run()方法,使用的时候用new Demo().start(),注意,要调用start()方法来启动线程,如果直接调用run()方法,就仅仅是调用函数,没有达到建立线程的目的。
2.如果Demo类需要继承其他的类,就不能在继承Thread类了,这种情况下可以使用实现Runnable接口或者Callable接口。它们的相同点是都是以接口的形式实现,可以继承其他类。而Callable比Runnable多了一个返回值
二.线程的生命周期。
新建,就绪,运行,阻塞,死亡。
注意:当调用start()以后,线程处于就绪状态,就绪状态的意思是它可以被执行,但是不一定在执行,因为可能在排队,它没有得到CPU的控制权,正在等待获取控制权。
改变状态那些破事:
jion() 它很霸道,加入进来就不让出CUP的控制权 直到它允许完。,当然,还可以让他和谐一点 jion(long millis).
setDaemon()方法,他很软弱。被放在后台执行,而且只要没有其他线程执行了,它不管执行完没执行完都挂了。
sleep(long milis) 就是暂时休息,时间到了咱又继续
yield() 直接回去重新排队,回到就绪状态