- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java程序设计基础与实践 第10章 多线程编程
第10章 多线程编程 本章导读 并发操作经常发生,例如,利用电脑听音乐时可以同时打印文档,Java提供多线程编程实现并发操作。多线程与并发处理是程序设计好坏优劣的重要标志。 Java编写程序都运行在JVM中,在JVM内部,每用Java命令启动一个Java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,所有程序代码的运行都是以线程来运行。对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。 但并发操作有时可能会出现问题,例如,老师修改学生成绩时,学生可能正在查询成绩,同一时间一个人往仓库中加货,另一个人从仓库中取货,这都是实际中经常发生的事情,如果控制不好就会出现学生查询到的成绩不是老师修改后的成绩,仓库中货物的总量统计不正确等问题,所以需要对并发操作进行控制。 在Java程序中,JVM负责线程的调度。 本章要点 · Java线程类和接口 · Java线程的创建方法 · Java线程的生命周期 · Java线程的优先权 · Java线程的同步和死锁 10.1 基础知识 10.1.1 什么是多线程? 现在的操作系统是多任务操作系统,多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,显然,程序是死的、静态的,进程是活的、动态的。在Windows下,进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位。在Windows中,CPU分配是以线程为单位的,一个进程可由多个线程组成。通过在一个程序进程内部同时执行多个线程,可以充分利用CPU等系统资源,从而最大限度的提高系统响应速度。 对于操作系统而言,其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。 多线程编程是程序设计技术中的一个很重要的领域,目前多数主流的操作系统都支持多任务操作。多线程是进行大型复杂软件系统开发的一把利器。 10.1.2 Thread类和Runnable接口 Java中编程实现多线程有两种方法,一是创建用户自己的线程子类,二是在用户自己的类中实现Runnable接口。无论哪种方法都需要使用Java基础类库中的Thread类及其方法。 ⑴ Thread类 Thread是Java的线程类,该类定义了线程所有的基本操作。 ⑵ Runnable接口 Runnable接口的定义如下: public interface Java.lang.Runnable{ public abstract void run(); } 由此可见Ruunnable接口中只有一个抽象方法run(),所有实现了Runnable接口的类都必须实现run()方法。Runnable接口中的run()方法可以被运行时系统自动识别和执行,即当线程被调度并转入运行状态时,系统自动执行run()方法中的代码。 10.1.2 创建线程 ⑴ 通过Thread类创建线程 Thread类提供了一个public void run()方法,该方法不执行任何操作,是线程的执行体。因此,Thread的子类应该重写该方法,以便于重定义线程的执行体。 使用Thread类创建线程要遵循以下步骤: ① 通过extendsThread类创建用户自己的线程; ② 重写run()方法; ③ 创建用户自己线程类的对象并且调用start()方法使之进入就绪队列,等待运行。 class TwoThreadsTest { public static void main (String args[]) { new SimpleThread(线程1).start();//创建用户自己线程类的对象,调用start()方法 new SimpleThread(线程2).start();//创建用户自己线程类的对象,调用start()方法 } } class SimpleThread extends Thread {//定义用户自己的线程类 public SimpleThread(String str) {//定义自己的构造方法 super(str); } public void run() {//重写run()方法 for (int i = 0; i 10; i++) {//循环方式调用线程 System.out.println(i + + getName());//利用Thread类的getName()方法得到线程名字 try { sleep((int)(Math.random() * 1000)); } catch (Inte
原创力文档


文档评论(0)