java网络编程第2章.ppt
《java网络编程第2章.ppt》由会员分享,可在线阅读,更多相关《java网络编程第2章.ppt(24页珍藏版)》请在三一办公上搜索。
1、第二章,线程管理,课程目标,线程的优先级:优先级概述线程优先级的具体应用线程同步:线程同步的目的线程同步的具体应用线程死锁:线程死锁产生的直接原因产生死锁的必要条件与解决方法wait和notify机制,体验项目,复盘就是每次博弈结束以后,双方棋手把刚才的对局再重复一遍,现在以复盘过程中的两个线程为例,在运行过程中,其中有一个线程用于下黑棋、另外一个线程用于下白棋,还有一个用于存放下棋步骤的Vector。,线程优先级,优先级概述 上一章我们只介绍了优先级的概念,下面我们对优先级作具体的介绍。多线程运行时需要定义线程运行的先后顺序,而先后顺序的设置在JAVA中我们通过设计线程优先级来实现,线程优先
2、级是用数字表示,数字越大线程优先级越高,但是最大值不可超过10,线程优先级的数值位于数值Thread.MIN_PRIORITY和数值Thread.MAX_PRIORITY之间(分别是1和10)。默认优先级Thread.NORM_PRIORITY的数值是这两者中间的数(为5)。新线程的优先级和产生它们的线程优先级是一样的。,关于线程优先级的设置,可用setPriority(int level)方法来设置线程的优先级,也可以用getPriority()方法获得线程的优先级。如果一个线程当前正在执行,可以用setPriority(int)把线程的优先级设置得比以前更低,优先级设置太低线程则有可能停止
3、执行,因为现在可能有其他更高优先级的线程要执行。所以,可以通过优先级确保程序像期望的那样对用户的请求做出响应。用户不必依靠JAVA虚拟机在具有相同优先级的线程上切换。我们可以通过调用yield()方法,让当前执行的线程放弃控制权。如果这样的话,JAVA会挑选一个新的线程来运行,但是如果刚刚放弃的是具有最高优先级的线程,它也有可能又立即运行。,优先级的具体应用,线程优先级的设置 在有多个线程运行时可以通过设置优先级来定义线程的执行顺序,通过线程的setPriority(int level)方法来设置优先级。public class PriThreadpublic static void main
4、(String args)ThreadA a=new ThreadA();ThreadB b=new ThreadB();a.setPriority(2);/设置优先级别,数值越大优先级越高b.setPriority(3);a.start();b.start();,class ThreadA extends Threadpublic void run()System.out.println(我是线程A);class ThreadB extends Threadpublic void run()System.out.println(我是线程B);因为在代码段当中我们把线程B的优先级设置高于线程A
5、,所以运行结果先执行线程B的run()方法后再执行线程A的run()方法。,线程优先级的获得,JAVA中获得线程优先级的方法,是通过getPriority()方法来实现的。public class PriThreadpublic 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);,设置
6、优先级也可以用线程常量MAX_PRIORITY、MIN_PRIORITY、NORM_PRIORITY来设置,其中MAX_PRIORITY为最高优先级;MIN_PRIORITY为最低优先级;NORM_PRIORITY是系统分配给线程的默认优先级。下面我们通过示例来说明它们的用法。,public class PriConstantpublic static void main(String args)Thread a=new Thread();int temp=Thread.MAX_PRIORITY;a.setPriority(temp);/设置此线程优先级最高System.out.println
7、(a.getPriority();temp=Thread.MIN_PRIORITY;a.setPriority(temp);/设置此线程优先级最低System.out.println(a.getPriority();temp=Thread.NORM_PRIORITY;a.setPriority(temp);/将线程优先级设置为默认 System.out.println(a.getPriority();,线程同步,线程同步的目的 一个程序中有多个线程在执行时,由于线程的速度无法预知,所以对于共用数据的插入、删除、更新等动作,若不做适当协调的话,所取得的数据有可能不正确。可能甲线程正在更新,但未完
8、成,而乙线程已经将数据取走了,这样的话数据当然不正确。为了避免这种情况,JAVA提供了一种同步机制的办法,在JAVA里同步是用synchronized关键字来实现的,synchronized关键字的作用是,确保在某个时刻只有一个线程允许执行特定的代码块,它有两种写法:一种是同步方法,另一种是同步对象,具体应用将在后面小节里介绍。,同步的具体应用,多线程将异步行为引入程序,所以在需要同步时,必须有一种方法强制进行同步,这样可以保证读写共享数据时的正确性,常用的方法是阻止这两个线程同时访问同一变量。在JAVA中同步很简单,所有对象都有和自己关联的隐含监控器,如果要进入一个对象的监控器,只需调用有s
9、ynchronized关键词修饰的方法即可。当一个线程进入一个同步的方法时,所有其他试图调用同一实例中的该方法的线程必须等待。synchronized关键字确保了对某些一次只能有一个线程可以执行的代码进行保护(互斥),而且它确保了一个线程更改后的数据对于其它线程是可见的(更改的可见性),synchronized关键词有两种使用方法:分别是同步方法和同步对象。(1)同步方法就是在方法前加上synchronized关键字,就实现了同步,下面是使用同步方法的示例,Target类的show()方法实现了同步,线程ThreadA和线程ThreadB同时得到了Target对象,并且都想执行show()方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 网络 编程
链接地址:https://www.31ppt.com/p-5436196.html