1.创建java线程
通过直接实例化Thread对象或实例化继承Thread对象来创建线程。
2.java线程的结束
方法一:线程到达run()方法的末尾
方法二:线程抛出一个未捕获到的Exception或者error
方法三:调用stop()
3.休眠
sleep():当前线程进入等待状态,直到过了指定时间或者另一线程对当前线程Thread调用了Thread.interrupt
调用了Thread.interrupt的休眠线程会抛出InterruptedException,此时线程知道他由于中断,不会查看计数器是否过期。
Thread.yield()并不引起休眠,暂停当前线程片段,让其他线程运行。当高优先级的调用Thread.yield()时,较低优先级线程就不会运行。
4.守护程序线程
即系统线程:如垃圾收集线程和jvm创建的其他线程。
当所有的非守护程序线程完成之后java程序退出。
任何线程都可以变成守护程序线程。用Thread.setDaemon()指明某个线程是守护程序线程。
5.线程有关的方法关键字汇总
start():启动线程,自动调用run()方法
run():线程真正运行的代码,必须是public切返回为void
Synchronized:保护共享数据。当一个线程访问时,被修饰的数据将被上锁,阻止其他线程访问。保持数据一致性的方法
以下三个方法协调共享数据,必须在Synchronized语句块内使用。且不属于Thread类属于Object
wait():使当前线程暂停并释放锁对象标志,让其他线程可以进入Synchronized块,当前线程被放入等待池中
notify():由jvm任意唤醒一个等待池中的线程,并给上锁
notifyAll():唤醒所有等待线程,给对象锁。
sleep():让当前线程暂停一段时间,使其他线程先执行(低、同、高优先级),但是不释放锁,有Synchronized块的,其它线程扔不能访问共享数据。注意该方法要捕获异常
join():调用join的线程完成run()方法里面的内容后,再执行join()。注意该方法需要捕获异常。
yield():让线程暂停,但是不能指定暂停的时间,只能让同优先级的线程执行