线程分类----------------------------------
线程分为两种:
1.用户线程;即一般的线程 2.守护线程;这是一种特殊的线程,它的特性有“陪伴”的意思,当进程中不存在非守护线程,则守护线程自动销毁,例A线程中启动了B守护线程,那么B就会一直"陪伴"着A线程,如果A线程结束了,那么B线程也会自动的销毁。就是说启动守护线程的线程,才是守护的对象。线程的优先级---------------------------
优先及高的线程得到cpu的资源将越多,也就越先执行这个线程
1.设置线程的优先级使用setPriority.java中线程优化级分为1-10个等级,jdk用三个常量来定义:
MIN_PRIORITY = 1 NORM_PRIORITY = 5 MAX_PRIORITY = 102.线程有继承性,即A线程启动了B线程,那么B线程的优先级与A一样
线程安全问题-----------------------------------------
1.从jvm结构上看:在jvm中有个栈,这个栈是专门存在java线程的信息,而每个线程都有它们各自的领地。栈中主要存放的是方法的栈帧,每当调用一个方法时就产生出一个栈帧,当方法调用结束就将对应的栈帧弹出销毁。与其销毁的还有方法中调用的变量,所以说如果方法中都只有私有变量,那就不可能产生线程安全问题。
2.那也说线程安全问题存在于"实例变量"中,如果多个线程共同访问1个对象,才有可能出现线程的安全问题。
api---------------------------------------------
start
启动一个线程,但如果多次启动会抛出IllegalThreadStateException。要注意的是start启动的顺序不代表线程启动的顺序
currentThread
返回调用该代码段的线程isAlive
判断当前的线程是否处于活动状态(线程已经启动且尚未终止)sleep
让当前“正在执行的线程”休眠,”正在执行线程“指this.currentThread()返回的线程getId
取得线程的唯一标识interrupt
在当前线程中打上了一个停止标识,并不会立即停止线程stop
立即停止线程,是非常暴力且不安全。该方法已经被废弃,因为如果强制让线程停止则有可能使一些清理性的工作得不到完成。另外一个情况就是对锁定的对象进行了”解锁“,导致数据得不到同步的处理,出现数据不一致的问题。suspend
暂停线程,可以使用resume恢复线程yield
放弃当前的cpu资源,将它让给其他的任务去占用cpu执行时间,但放弃的时间不确定,有可能刚放弃又马上获得cpu的时间片。