Java线程
线程:一个程序执行多个任务,一个任务就是所谓的线程,可以运行一个以上的线程程序称之为多线程程序
线程和进程比较:线程开销小。可共享数据。进程开销大,各个进程之间是相互独立。
Thread:
sleep() 不会产生新的线程,使用的是当前线程,会抛出InterruptedException的异常。
Strat(),run().记住不要调用run方法,不然程序不会启动新线程,会将run作为程序的对象来运行。
Stop和suspend已被弃用 容易出现死锁。
Interrupt Void:向线程发送终端请求。中断状态为true,如果该线程被sleep占用,则会抛出InterrputedException异常。
Interrupted Boolean:静态方法,检测线程是否中断。将终端状态会改变成false;
isInterrupted 线程方法。检测线程是否检测,不会清除中断线程。
如果在每次迭代的时候调用sleep或者其他的中断方法的时候,线程不会每次都去检测是否中断。相反会抛出InterruptedException异常。
currentThread Thread:会返回当前执行的Thread对象。
线程六种状态:
1. new(创建):new关键字
2. runnable(就绪):调用start(),就绪的线程可能在运行,也可能没有运行。当线程数目大于处理器数目的时候,那么会使用时间调度器来处理
3. waiting(等待):例如:wait()
4. timed waiting(计时等待):例如:sleep(long time):阻塞和等待线程是最不消耗资源的
5. blocked(被阻塞):
1)当一个线程试图获取一个内部锁,而内部锁被其他线程锁持有,那么线程是进入阻塞状态,当其他线程释放该锁,其他线程允许本线程持有的时候,那么该线程编程非阻塞状态。
2)被阻塞状态和等待状态是有很大的不同。
3)计时等待:Thread.sleep,Object.wait,Thread.join,
6. terminated(被终止):正常:执行完run方法正常退出
意外:没有捕获异常终止了run方法
特殊:stop杀死线程(不推荐使用)
Join void:等待终止制定线程。(long millis)等待指定的时间终止线程
GetState:获取状态,就是以上六种状态
Resume修复线程:通suspend相对应,已过时。
线程属性:
优先级:调度器选择线程时,会选择优先级高的。但是线程的优先级是高度依赖于系统的。所以不要指望在这里设置优先级能够很好的得到自己想要的结果。虚拟机的线程优先级是依赖于宿主系统,比如windows只有7个线程优先级。如果高优先级的没有进入活动状态,那么低优先级的线程永远不可能执行。每次调度器选择线程的时候会优先从优先级高的线程中取。
优先级最低为1,最高为10,默认为5
Yield static ,将控制权让给和他同等级或者更高级别优先级的线程
守护线程:setDeamon(true),当所有非守护线程退出后,守护线程也就自动退出了,温馨提示:不要用守护线程操作文件,或者共享资源,避免守护线程意外终止。设置守护线程必须在线程调用start()之前。
线程组:默认的线程都会添加到group中。或者创建group,然后将线程加入进去。
异常处理器:threadGroup实现了UncaughtExceptionHandler