java网络编程第2章

上传人:油条 文档编号:47641403 上传时间:2018-07-03 格式:PPT 页数:24 大小:893.50KB
返回 下载 相关 举报
java网络编程第2章_第1页
第1页 / 共24页
java网络编程第2章_第2页
第2页 / 共24页
java网络编程第2章_第3页
第3页 / 共24页
java网络编程第2章_第4页
第4页 / 共24页
java网络编程第2章_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《java网络编程第2章》由会员分享,可在线阅读,更多相关《java网络编程第2章(24页珍藏版)》请在金锄头文库上搜索。

1、第二章线程管理 课程目标课程目标q线程的优先级: q优先级概述 q线程优先级的具体应用 q线程同步: q线程同步的目的 q线程同步的具体应用 q线程死锁: q线程死锁产生的直接原因 q产生死锁的必要条件与解决方法 qwait和notify机制 体验项目 复盘就是每次博弈结束以后,双方棋手把刚才的对局 再重复一遍,现在以复盘过程中的两个线程为例,在运 行过程中,其中有一个线程用于下黑棋、另外一个线程 用于下白棋,还有一个用于存放下棋步骤的Vector。 线程优先级 优先级概述 上一章我们只介绍了优先级的概念,下面我们对优先级 作具体的介绍。 多线程运行时需要定义线程运行的先后顺序,而先后顺 序的

2、设置在JAVA中我们通过设计线程优先级来实现,线 程优先级是用数字表示,数字越大线程优先级越高,但是 最大值不可超过10,线程优先级的数值位于数值 Thread.MIN_PRIORITY和数值Thread.MAX_PRIORITY 之间(分别是1和10)。默认优先级 Thread.NORM_PRIORITY的数值是这两者中间的数(为5 )。新线程的优先级和产生它们的线程优先级是一样的。关于线程优先级的设置,可用setPriority(int level)方 法来设置线程的优先级,也可以用getPriority()方法获得 线程的优先级。如果一个线程当前正在执行,可以用 setPriority(

3、int)把线程的优先级设置得比以前更低,优先 级设置太低线程则有可能停止执行,因为现在可能有其 他更高优先级的线程要执行。所以,可以通过优先级确 保程序像期望的那样对用户的请求做出响应。用户不必依靠JAVA虚拟机在具有相同优先级的线程 上切换。我们可以通过调用yield()方法,让当前执行的 线程放弃控制权。如果这样的话,JAVA会挑选一个新 的线程来运行,但是如果刚刚放弃的是具有最高优先级 的线程,它也有可能又立即运行。 优先级的具体应用 线程优先级的设置 在有多个线程运行时可以通过设置优先级来定义线程的执行顺序,通 过线程的setPriority(int level) 方法来设置优先级。

4、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 vo

5、id 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 p

6、riB=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 Threa

7、d(); int temp=Thread.MAX_PRIORITY; a.setPriority(temp);/设置此线程优先级最高 System.out.println(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关键字的作 用是,确保在某个时刻只有一个线程允许执行特定的代 码块,它有两种写法:一种是同步方法,另一种是同步 对象,具体应用将在后面小节里介绍。同步的具体应用 多线程将异步行为引入程序,所以在需要同步时,必须有一种方 法

9、强制进行同步,这样可以保证读写共享数据时的正确性,常用的 方法是阻止这两个线程同时访问同一变量。在JAVA中同步很简单,所有对象都有和自己关联的隐含监控器 ,如果要进入一个对象的监控器,只需调用有synchronized关键词 修饰的方法即可。当一个线程进入一个同步的方法时,所有其他试 图调用同一实例中的该方法的线程必须等待。synchronized关键字 确保了对某些一次只能有一个线程可以执行的代码进行保护(互斥 ),而且它确保了一个线程更改后的数据对于其它线程是可见的( 更改的可见性),synchronized关键词有两种使用方法:分别是同 步方法和同步对象。 (1)同步方法就是在方法前加

10、上synchronized关键字,就实现 了同步,下面是使用同步方法的示例,Target类的show()方法实现 了同步,线程ThreadA和线程ThreadB同时得到了Target对象,并 且都想执行show()方法,代码如下。public class TestSync public static void main(String args ) Target t=new Target(); new ThreadA(t).start(); new ThreadB(t).start(); class Target String msg=“; public synchronized void sh

11、ow() /同步方法 char msgchars=msg.toCharArray(); for(int i=0;i“; public void show() char msgchars=msg.toCharArray(); for(int i=0;i 实践项目的具体要求如下 : 以在线下棋步骤(复盘)的两个线程为例,在运行过程中 ,其中有一个线程用于下黑棋、另外一个线程用于下白棋 ,还有一个用于存放下棋步骤的Vector,他的显示效果为 :运行时打开一个窗体,上面加载了一个棋盘,之后黑棋 白棋先后交替下棋,间隔为一秒钟,直到复盘结束为止。 本章总结C语言概述与发展 C语言的特点程序设计语言概述 C语言程序结构 C语言程序书写时的注意事项 C语言程序格式上的其他特点 C语言开发环境-Visual C+ 6.0的使用

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号