Java多线程(2) 线程的状态和属性

来源:互联网 发布:手机lol视频软件 编辑:程序博客网 时间:2024/05/18 03:16

概述

线程的状态和属性这篇比较尴尬。第一,这块实际更多的属于操作系统的部分,至少需要操作系统方面的基础知识作为铺垫;第二,这块代码部分不多,如果用代码不好表达,如果干讲,我也不太能够讲明白;第三,我实际用的地方很少,不想前面的线程启动和中断,也不像后面的线程同步,最多最多就是设置个优先级,一般都也是最低和最高两种就够了。所以,我就决定以整理知识点的方式来完成。其中大部分均摘抄至《Java核心技术 卷1》第14章。

线程状态

New 新创建

New是指当用户使用new操作符创建一个新的线程时的状态,如:new Thread(r)。此时,程序还没有开始运行线程中的代码,即还没有运行thread.start()。

Runnable 可运行

Runnable是指线程调用start()方法,不管其当前是否正在执行。例如:线程被中断或者是被其他线程抢占,该线程均处于Runnable状态。

Blocked 被阻塞

当该线程所需要的对象锁被其他线程所持有,该线程将处于阻塞状态,待其他线程释放该锁后,线程调度器允许该线程持有它,该线程将变为非阻塞状态。

Waiting 等待 和 Timed waiting 计时等待

当线程等待其他线程通知调度器一个条件时,该线程进入等待状态,例如:Object.wait方法或Thread.join方法。还有几个方法拥有一个超时参数,调用它们会进入计时等待状态,该状态将移植保持到超时期满或者接收到适当的通知,带有超时参数的方法除了上面2种,还有Thread.sleep方法。等待(计时等待)状态与阻塞状态不同,一种是请求锁,而另外一种是等待通知。但是,线程在包括计时等待在内的三种状态都暂时不活动,不运行任何代码而且消耗最少的资源。

Terminated 被终止

线程的终止是因为run正常退出而自然死亡,或者是因为一个没有捕获的异常终止了run方法而意外死亡。

线程属性

线程优先级

在Java中,每一个线程均有一个优先级,默认继承其父线程的优先级。可以使用setPriority方法来提高或降低优先级。其中最低为MIN_PRIORITY(定义为1),最高为MAX_PRIORITY(定义为10)之间的任何值。NORM_PRIORITY被定义为5.每当线程调度器选择线程时,将会优先选择优先级高的线程。由于线程优先级是高度依赖于系统的,Java线程的优先级映射到宿主机平台的优先级上,优先级个数可能会更多,也许更少。例如:Windows有7个优先级别,一些Java优先级将映射到相同操作系统优先级。在Sun为Linux提供的Java虚拟机,线程的优先级会被忽略,所有线程拥有相同的优先级。

守护线程

守护线程的唯一用途就是为其他线程提供服务,当只剩下守护线程时,虚拟机就会突出。可以使用thread.setDaemon(true)的方法将线程转化为守护线程。
本节基本都是理论部分,没有太多实践部分,下节将会讲线程的同步。

阅读全文
0 0