Java多线程访问控制管理分析
2014-10-21梁德华
摘 要:本文分析并描述了Java多线程访问控制的基本方法和多线程同步访问的控制方法,以及使用优先级解决死锁问题的方法,并且用简单语句作说明。
关键词:Java;多线程;同步控制
中图分类号:TP312
1 Java多线程的基本控制
在Java中,一个线程从创建到死亡称为线程的一个生命周期,它的生命周期有多个不同状态,一般为:Enabled、Running、Sleeping、Joining、Waiting、Locking。对于线程的这些状态,Java在Thread类中定义了一些方法可以在程序中手动控制。要结束一个线程的运行,可以使用stop()方法。但是stop()方法并不是非常安全的,它会强制中止一个线程的运行,但是会释放这个线程锁住的所有对象,这些对象被解锁后就可能被其他的线程直接访问,导致错误的结果。因此,要中止一个线程,最好是设置一个标志位,在run()方法中根据这个标记来判断是否继续保持状态。要中止线程的时候,可以使用setRunFlag()方法。
在暂停和恢复线程执行时也会出现同样的问题。可以使用Thread类中supspend()和resume()方法來暂停和恢复,但不建议使用,它们容易造成线程的死锁。解决的方法也是使用一定的标志变量。使用setsuspendFlag(true)可以暂停线程的执行,暂停时间的指定是通过sleep()方法来实现,暂停结束就回到等待队列,不是恢复执行状态。所以sleep()方法不能精确控制线程计划工作的时间尺度。
下面用模拟一个龟兔接力跑的实例来演示Java多线程的sleep()方法的控制。模拟的接力跑中有一只乌龟和一只兔子。当兔子跑完400米将接力棒交给乌龟,乌龟跑完400米后结束。部分代码如下:
2 Java多线程的同步控制……p>
