文档介绍:第二章线程管理课程目标课程目标?线程的优先级: ?优先级概述?线程优先级的具体应用?线程同步: ?线程同步的目的?线程同步的具体应用?线程死锁: ?线程死锁产生的直接原因?产生死锁的必要条件与解决方法? wait 和 notify 机制体验项目——<五子棋复盘游戏> 复盘就是每次博弈结束以后,双方棋手把刚才的对局再重复一遍,现在以复盘过程中的两个线程为例,在运行过程中,其中有一个线程用于下黑棋、另外一个线程用于下白棋,还有一个用于存放下棋步骤的 Vector 。线程优先级优先级概述上一章我们只介绍了优先级的概念,下面我们对优先级作具体的介绍。多线程运行时需要定义线程运行的先后顺序,而先后顺序的设置在 JAVA 中我们通过设计线程优先级来实现,线程优先级是用数字表示,数字越大线程优先级越高,但是最大值不可超过 10,线程优先级的数值位于数值 和数值 之间(分别是 1和10)。默认优先级 的数值是这两者中间的数(为 5)。新线程的优先级和产生它们的线程优先级是一样的。关于线程优先级的设置,可用 setPriority(int level) 方法来设置线程的优先级,也可以用 getPriority() 方法获得线程的优先级。如果一个线程当前正在执行,可以用 setPriority(int) 把线程的优先级设置得比以前更低,优先级设置太低线程则有可能停止执行,因为现在可能有其他更高优先级的线程要执行。所以,可以通过优先级确保程序像期望的那样对用户的请求做出响应。用户不必依靠 JAVA 虚拟机在具有相同优先级的线程上切换。我们可以通过调用 yield() 方法,让当前执行的线程放弃控制权。如果这样的话, JAVA 会挑选一个新的线程来运行,但是如果刚刚放弃的是具有最高优先级的线程, 它也有可能又立即运行。优先级的具体应用线程优先级的设置在有多个线程运行时可以通过设置优先级来定义线程的执行顺序,通过线程的 setPriority(int level) 方法来设置优先级。 public class PriThread { public static void main(String args[ ]) { ThreadA a=new ThreadA(); ThreadB b=new ThreadB(); (2);// 设置优先级别,数值越大优先级越高 (3); (); (); }} class ThreadA extends Thread { public void run() { (" 我是线程 A"); }} class ThreadB extends Thread { public void run() { (" 我是线程 B"); } } 因为在代码段当中我们把线程 B的优先级设置高于线程A,所以运行结果先执行线程 B的 run() 方法后再执行线程A的 run() 方法。线程优先级的获得 JAVA 中获得线程优先级的方法,是通过 getPriority() 方法来实现的。 public class PriThread { public static void main(String args[ ]) { Thread a=new Thread(); Thread b=new Thread(); int priA=();// 获得优先级的方法 int priB=(); (priA); (priB); }} 设置优先级也可以用线程常量 MAX_PRIORITY 、 MIN_PRIORITY 、 NORM_PRIORITY 来设置,其中 MAX_PRIORITY 为最高优先级; MIN_PRIORITY 为最低优先级; NORM_PRIORITY 是系统分配给线程的默认优先级。下面我们通过示例来说明它们的用法。 public class PriConstant { public static void main(String args[ ]) { Thread a=new Thread(); int temp=; (temp); //设置此线程优先级最高 (()); temp=; a