- 1、本文档共56页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章Java多线程-v2.1
7.1 线程基础 7.1.1 线程概述 7.1.2 线程的状态 7.1.3 线程的优先级 7.2 线程的创建 7.2.1 通过继承Thread类创建 7.2.2 通过实现Runnable接口创建 7.3 多线程的创建 7.4 线程的调度 7.4.1 线程优先级的获取与设置 7.4.2 线程睡眠 7.4.3 线程让步 7.4.4 线程等待 7.4.5 线程唤醒 7.5 多线程的同步处理 7.5.1 多线程的互斥 7.5.2 synchronized方法 7.1 线程基础 1. 线程概念 进程通常被定义为一个正在运行的程序的实例,一个程序可以对应多个进程,进程从来不执行任何程序,它只是线程的执行环境,真正完成代码执行的是线程。 每个进程至少有一个线程,当创建一个进程时,操作系统会自动创建这个进程的第一个线程,称为主线程。当一个Java程序启动时,即创建了一个Java进程,JVM会自动创建主线程,并在该线程中调用程序的main()方法,然后主线程就可以创建其他线程。 进程和线程 每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大. 线程:轻量的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小. 多进程:在操作系统中,能同时运行多个任务(程序). 多线程:在同一应用程序中,有多个顺序流同时执行. 注意区分线程概念: 不是程序,自己本身不能运行,必须在程序中运行. 如何在一个程序内部实现多个线程? 2. 线程的状态 基本可以划分成如下状态序列: ①创建状态(Newborn) ② 可执行状态(Runnable) ③ 运行状态(Running) ④ 阻塞状态(Blocked) ⑤ 终止状态(Dead) 如图所示: 创建状态(New) Thread tf = new Thread(“First”); 可运行状态(Runnable) tf.start( ); 运行状态(Running) 线程被调度转入执行(执行run()方法) 阻塞状态(Blocked) 调用了sleep()方法; 调用了其他线程的join()方法; 为等候一个条件变量,线程调用wait()方法; I/O处发生线程阻塞 终止状态(Dead) 线程的终止,即线程的run()方执行完,或非正常退出. 3. 线程的优先级 线程的优先级代表该线程的重要程度,每个线程都有给定的优先级,优先级高的线程具有更大的机会优先获得CPU时间。 Java线程的优先级从低到高分为10级,线程的优先级介于1(对应线程的常量Thread.MIN_PRIORITY)和10 (Thread.MAX_ PRIORITY)之间,默认优先级是5 (Thread.NORM_PRIORITY)。 优先级设置一般在线程启动之前,也可以放在启动之后。例如: Thread ta= new Thread(“A”); System.out.println(ta.getPriority()); ta.setPriority(6); ta.start(); 7.2 线程创建 Java提供了一个Thread类和一个Runnable接口来支持线程的创建。 构造线程体的两种方法 定义一个线程类,它继承类Thread并重写其中的方法run( ); 提供一个实现接口Runnable的类作为线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体run( ); runnable接口中只声明了一个抽象方法run()。 不论何种方式,都必须建立Thread类或其子类的实例! 1. 继承Thread类 a. Thread类的构造方法及其重载 public Thread(); //创建一个线程对象 public Thread(Runnable target); //实现这个接口的类的对象作为实参 public Thread(String name); //线程的名称 public Thread(Runnable target, String name); public Thread( ThreadGroup group, Runnable target); //允许线程组 public Thread( ThreadGroup group, String name); public Thread( ThreadGroup group, Runnable target,
文档评论(0)