什么是线程:
一个程序的最小执行单元
线程new出来调用.start()启动后,进入Runnable状态(执行或者待执行),申请锁可能进入阻塞状态(BLOCKED),调用.wait()方法进入有限期等待(WATING)状态或无限期(TIMED_WAITING),等到.notify()方法通知才能回到Runnable状态,执行结束后进入Terminated状态。
线程的基本操作
继承Thread类,重写Run方法,.star()启动
继承Runnable接口,实例自身对象,重写.run()方法,new Thread构造自己的实例,.star()启动
或者new Thread的时候传一个Runnable接口 的实例
线程的终止
.stop()方法终止
不推荐使用,逃过暴力,用为会立即释放monitor资源,如果一给线程写入数据只写入了一般就被.stop()终止了,就会导致数据不完整。
线程中断
调用sleep()方法让线程等待延时执行
挂起(suspend)和继续执行(resume),两个操作 都是不推荐使用的
如果resume发生在suspend之前,会导致该线程一直被挂起,所以该线程的锁也不会释放,别的线程就会一直等待锁,导致死锁的发生。
看java虚拟机的线程:
等待join和谦让yeild
守护线程
.setDeamon(true)设置
线程优先级:
.setPriority()方法调用
线程同步
用法1
用法2
用法3:
线程等待和唤醒:
调用等待和唤醒方法时需要 同步object锁实例监视器
等待.wait()方法会释放object监视器,等待另一个线程.notify()获取到object监视器后并且执行完后续操作后才会唤醒.wait()的线程。