书签 分享 收藏 举报 版权申诉 / 24
上传文档赚钱

类型《Java语言》课件第10章.ppt

  • 上传人(卖家):momomo
  • 文档编号:5818491
  • 上传时间:2023-05-11
  • 格式:PPT
  • 页数:24
  • 大小:253KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《Java语言》课件第10章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Java语言 Java 语言 课件 10
    资源描述:

    1、第第10章章多线程机制多线程机制 1.1 Java线程的概念线程的概念 1.2 Java多线程编程方法多线程编程方法 1.3 线程的控制线程的控制1.4 线程资源的同步处理线程资源的同步处理1多进程多进程 多进程的缺点:多进程的缺点:进程切换开销大;进程切换开销大;进程间的通信很不方便。进程间的通信很不方便。2多线程多线程 多线程则指的是在单个程序中可以同时运行多个多线程则指的是在单个程序中可以同时运行多个不同的线程,执行不同的任务不同的线程,执行不同的任务 线程切换的开销小线程切换的开销小。线程的状态线程的状态Java采用抢占式调度策略采用抢占式调度策略 下面几种情况下,当前线程会放弃下面几

    2、种情况下,当前线程会放弃CPU:(1)当前时间片用完;)当前时间片用完;(2)线程在执行时调用了)线程在执行时调用了yield()或或sleep()方法主动放弃;方法主动放弃;(3)进行)进行I/O 访问,等待用户输入,导致线程阻塞;或者为等访问,等待用户输入,导致线程阻塞;或者为等候一个条件变量,线程调用候一个条件变量,线程调用wait()方法;()方法;(4)有高优先级的线程参与调度。)有高优先级的线程参与调度。线程的优先级用数字来表示,范围从线程的优先级用数字来表示,范围从110。主线程。主线程的默认优先级为的默认优先级为5 Thread.MIN_PRIORITY=1 Thread.MA

    3、X_PRIORITY=10 Thread.NORM_PRIORITY=5 1、Thread构造方法构造方法 public Thread(ThreadGroup group,Runnable target,String name);public Thread()();public Thread(Runnable target);public Thread(Runnable target,String name););public Thread(String name););public Thread(ThreadGroup group,Runnable target););public Thre

    4、ad(ThreadGroup group,String name););2、Thread类的主要方法类的主要方法 方法 功能CurrentThread()返回当前运行的Thread对象 start()启动线程 run()由调度程序调用,当run()方法返回时,该线程停止stop()使调用它的线程立即停止执行sleep(intn)使线程睡眠n毫秒,n毫秒后,线程可以再次运行suspend()使线程挂起,暂停运行Not Runnable resume()恢复挂起的线程,使处于可运行状态Runnable yield()将CPU控制权主动移交到下一个可运行线程2、Thread类的主要方法类的主要方法s

    5、etName(String)赋予线程一个名字 getName()取得由setName()方法设置的线程名字的字符串getPriority()返回线程优先级setPriority(int)设置线程优先级join()当前线程等待调用该方法的线程结束后,再往下执行setDaemon(boolean)设置该线程是daemon线程还是用户线程,Daemon线程也称服务线程,通常编成无限循环,在后台持续运行。例例10-1 直接继承直接继承Thread类实现多线程类实现多线程 import java.util.*;class TimePrinter extends Thread int pauseTime;

    6、/中间休息时间中间休息时间 String name;/名称标识名称标识 public TimePrinter(int x,String n)pauseTime=x;name=n;例例10-1 直接继承直接继承Thread类实现多线程类实现多线程(续续1)public void run()while(true)try System.out.println(name+:+new Date(System.currentTimeMillis();Thread.sleep(pauseTime);catch(Exception e)System.out.println(e);该方法是静态方法还该方法是静态

    7、方法还是实例方法?是实例方法?例例10-1 直接继承直接继承Thread类实现多线程类实现多线程(续续2)static public void main(String args)TimePrinter tp1=new TimePrinter(1000,Fast Guy);tp1.start();TimePrinter tp2=new TimePrinter(3000,Slow Guy);tp2.start();【思考思考】不通过不通过start方法,直接执行方法,直接执行run()方法,会方法,会产生什么问题?产生什么问题?通过实现通过实现Runnable 接口编写多线程应用接口编写多线程应用

    8、 通过通过 Thread 类的构造函数类的构造函数public Thread(Runnable target)可可以将一个以将一个Runnable 接口对象传递给线程,线程在调度时将自动接口对象传递给线程,线程在调度时将自动调用调用Runnable 接口对象的接口对象的run方法。方法。public class Thread implements Runnable private Runnable target;public Thread()public Thread(Runnable target).public void run()if(target!=null)target.run();

    9、.例例10-2 计数按钮的设计计数按钮的设计 import java.applet.*;import java.awt.*;class countbutton extends Button implements Runnable int count=0;public countbutton(String s)super(s);public void run()while(count10000)try this.setLabel(+count+);Thread.sleep(int)(10000*Math.random();catch(Exception e)public class counta

    10、pplet extends Applet public void init()setLayout(null);countbutton t1=new countbutton(“first”);t1.setBounds(30,10,80,40);add(t1);countbutton t2=new countbutton(“second”);t2.setBounds(130,10,80,40);add(t2);(new Thread(t1).start();(new Thread(t2).start();例例10-2 计数按钮的设计计数按钮的设计(续续1)10.3 线程的控制线程的控制 放弃运行(

    11、放弃运行(Yielding)-yield()挂起(挂起(Suspending)-suspend()睡眠一段时间(睡眠一段时间(Sleeping)-sleep()阻塞(阻塞(Blocking)-I/O操作操作 10.3.5 关于用户线程和看守线程(关于用户线程和看守线程(Daemon)在程序中存在两种线程,用户级线程和后台看守线程在程序中存在两种线程,用户级线程和后台看守线程 public final boolean isDaemon()如果线程是看守线程,返回如果线程是看守线程,返回true,否则,返回,否则,返回false。public final void setDaemon(boolea

    12、n on)设置线程为看守线程(设置线程为看守线程(on为为true),或用户线程(或用户线程(on为为false)只有程序存在用户级线程时,程序才能保持运行。如果所只有程序存在用户级线程时,程序才能保持运行。如果所有的用户级线程均终止了执行,则所有看守线程也将结束有的用户级线程均终止了执行,则所有看守线程也将结束运行。运行。执行执行main方法的线程是用户级线程,如果希望方法的线程是用户级线程,如果希望main方法方法结束时,终止整个程序的运行,则可以将所有线程指定为结束时,终止整个程序的运行,则可以将所有线程指定为看守线程。看守线程。10.4.1 临界资源问题临界资源问题 public cl

    13、ass Stack int idx=0;char data=new char10;public void push(char c)synchronized(this)dataidx=c;idx+;public synchronized char pop()idx-;return dataidx;在执行该代码段时在执行该代码段时必须取得对象锁必须取得对象锁在执行该方法时必在执行该方法时必须取得对象锁须取得对象锁10.4.2 wait()和和notify()方法方法 这两个方法配套使用这两个方法配套使用 使用要求:使用要求:必须在必须在 synchronized 方法或块中调用。因为只方法或块中调

    14、用。因为只有在同步代码段中才存在资源锁定。有在同步代码段中才存在资源锁定。这对方法直接隶属于这对方法直接隶属于Object 类类,而不是,而不是Thread类。类。采用采用wait和和notify可以解决很多临界访问控制问题可以解决很多临界访问控制问题 释放对象锁释放对象锁,进入,进入等待阻塞状态等待阻塞状态通知等待者执行通知等待者执行synchronized method1()/由线程由线程1调用调用.此处访问享数据此处访问享数据 available=true;notify();synchronized method2()由线程由线程2调用调用 while(!available)try wa

    15、it();catch(Interrupted Exception e)此处访问共享数据此处访问共享数据 10.4.3 生产者消费者模型生产者消费者模型-生产者在生产了一个整数后,必须等待消费者生产者在生产了一个整数后,必须等待消费者访问处理该整数后才能生产下一个数访问处理该整数后才能生产下一个数 程序程序1:消费者:消费者 class Consumer extends Thread private ShareArea sharedObject;public Consumer(ShareArea shared)sharedObject=shared;public void run()int va

    16、lue;do try Thread.sleep(int)(Math.random()*3000);catch(InterruptedException exception)value=sharedObject.getSharedInt();System.out.println(消费消费:+value);while(value!=10);程序程序2:生产者生产者 class Producer extends Thread private ShareArea sharedObject;public Producer(ShareArea shared)sharedObject=shared;publ

    17、ic void run()for(int count=1;count=10;count+)try Thread.sleep(int)(Math.random()*3000);catch(InterruptedException exception)sharedObject.setSharedInt(count);System.out.println(生产:生产:+count);程序程序3:共享数据访问控制程序:共享数据访问控制程序 class ShareArea private int sharedInt=-1;private boolean writeable=true;public syn

    18、chronized void setSharedInt(int value)while(!writeable)try wait();catch(InterruptedException exception)sharedInt=value;writeable=false;notify();public synchronized int getSharedInt()while(writeable)try wait();catch(InterruptedException exception)writeable=true;notify();return sharedInt;程序程序4:测试主程序:测试主程序 public class SharedTest public static void main(String args)ShareArea sharedObject=new ShareArea();Producer p=new Producer(sharedObject);Consumer c=new Consumer(sharedObject);p.start();c.start();

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《Java语言》课件第10章.ppt
    链接地址:https://www.163wenku.com/p-5818491.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库