- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程目标 线程的优先级: 优先级概述 线程优先级的具体应用 线程同步: 线程同步的目的 线程同步的具体应用 线程死锁: 线程死锁产生的直接原因 产生死锁的必要条件与解决方法 wait和notify机制 体验项目——五子棋复盘游戏 复盘就是每次博弈结束以后,双方棋手把刚才的对局再重复一遍,现在以复盘过程中的两个线程为例,在运行过程中,其中有一个线程用于下黑棋、另外一个线程用于下白棋,还有一个用于存放下棋步骤的Vector。 线程优先级 优先级概述 上一章我们只介绍了优先级的概念,下面我们对优先级作具体的介绍。 多线程运行时需要定义线程运行的先后顺序,而先后顺序的设置在JAVA中我们通过设计线程优先级来实现,线程优先级是用数字表示,数字越大线程优先级越高,但是最大值不可超过10,线程优先级的数值位于数值Thread.MIN_PRIORITY和数值Thread.MAX_PRIORITY之间(分别是1和10)。默认优先级Thread.NORM_PRIORITY的数值是这两者中间的数(为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(); a.setPriority(2);//设置优先级别,数值越大优先级越高 b.setPriority(3); a.start(); b.start(); } } class ThreadA extends Thread { public void run() { System.out.println(我是线程A); } } class ThreadB extends Thread { public void run() { System.out.println(我是线程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=a.getPriority();//获得优先级的方法 int priB=b.getPriority(); System.out.println(priA); System.out.println(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=Thread.MAX_PRIORITY; a.setPriority(temp); //设置此线程优先级最高 System.o
文档评论(0)