- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
12.1进程和线程 12.2线程的创建与启动 12.3线程的状态与生命周期 12.4线程的调度和优先级 12.5线程同步 12.6线程通信 12.7线程死锁 12.8线程联合 12.9计时器线程 12.10守护线程 第12章多线程 本章教学内容: 本章教学目标: 理解线程的基本概念 掌握Java线程的状态和状态转换 掌握线程的创建和使用 掌握线程优先级的使用 理解多线程的概念 掌握Java多线程实现 掌握线程的同步技巧 掌握计时器线程的用法 理解线程的联合 理解守护线程 12.1进程和线程 ? 12.1.1程序、进程与线程 1.程序 程序是一段静态代码,是应用软件执行的蓝本。程序只有在执行时才能够为用户提供功能。用户执行程序时,程序就进行一次动态的执行过程,从代码加载、分配内存空间、CPU执行程序到执行完毕。 ? 2.进程 进程是获取系统资源动态执行程序的一次过程。这个过程也是进程本身从产生、发展到最终消亡的过程。每个进程都有自己的内存空间。 多进程是指在操作系统中同时执行的多个应用程序。现代的多进程操作系统可以同时管理计算机系统中的多个进程(程序),每个进程都拥有独立的系统资源,进程之间一般不相互占用系统资源,所以进程之间的通信一般比较困难。多进程运行和程序开发没有关系,多进程运行是由操作系统实现的。 3.线程 线程是比进程更小的执行单位,它不是进程,但其行为很像进程。线程是在进程独立内存区域内部独立执行的流程,即线程是进程中的一段代码。一个进程在其执行过程中可以产生多个线程,这些线程可以同时存在、同时运行,形成多条执行线索,每条线索(即每个线程)都有其自身的产生、发展和消亡的过程。每个线程都有自己独立的运行栈和程序计数器。 12.1.2多线程优缺点 1.使用多线程编程的优点 (1)多线程技术使程序的响应速度更快。因为用户界面可以在进行其它工作的同时一直处于活动状态。 (2)当前没有进行处理的任务时可以将处理器时间让给其它任务。 (3)占用大量处理时间的任务可以定期将处理器时间让给其它任务。 (4)可以随时停止任务。 (5)可以分别设置各个任务的优先级以优化性能。 2.使用多线程编程的缺点 (1)等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源,如打印机等。 (2)对线程进行管理要求额外的 CPU开销。线程的使用会给系统带来上下文切换的额外负担。 (3)线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。 (4)对公有变量的同时读或写。当多个线程需要对公有变量进行写操作时,后一个线程往往会修改掉前一个线程存放的数据,从而使前一个线程的参数被修改;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的。 12.2 线程的创建与启动 12.2.1 Thread类简介 在Java中使用Thread类或子类创建线程对象。Thread 类存放在 java.lang 类库里,该类的构造方法有: 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 Thread(ThreadGroup group,String name); 12.2.2通过继承Thread类创建线程 通过继承Thread类创建线程的步骤: 1.创建Thread类的子类; 2.重写run()方法;run()方法规定线程对象的行为和功能。Thread类中的run()方法中没有任何操作语句,所以用户需要在Thread类的子类中 重写run()方法。 3.启动线程。调用 Thread类中的 start()方法启动线程。线程启动后,需要获取cpu才能自动调用run()运行。 实例12-1通过继承Thread类创建线程,实现窗口中的命令按钮的标题不断改变的效果。 12.2.3 通过实现Runnable接口创建线程 通过实现Runnable接口创建线程的步骤如下: 1.创建实现Runnable接口的类。 2.重写Runnable接口中run()方法。 3.创建实现Runnable 接口的类的对象。 4.将第三步创建的目标对象作为Thread 类的构造方法的参数来创建线程对象。 5.通过s
文档评论(0)