- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
996并发
?线程的概念?线程的创建?线程调度与线程控制?线程同步?线程状态与生命周期什么是线程?多线程是实现并发的一种有效手段。?一个进程可以通过运行多个线程来并发地执行多项任务。?多个线程如何调度执行由系统来实现。什么是线程?线程是程序中的单个执行流,多线程是一个程序 中包含的多个同时运行的执行流。线程与进程?进程:内核级的实体。包含虚存映象、文件指示符, 用户ID等。这些结构都在内核空间中,用户程序 只有通过系统调用才能访问与改变。?线程:用户级的实体。线程结构驻留在用户空间中, 能够被普通的用户级函数组成的线程库直接访问。 寄存器(栈指针,程序计数器)是线程专有的成分。?一个进程中的所有线程共享该进程的状态。CPUCodeDataJava中的线程? Java 中线程被认为是一个CPU、程序代码、和数据的封装体。?一个虚拟的CPU,?该CPU执行的代码: 代码与数据是相互独立的,代 码可以与其它线程共享。?代码所操作的数据:数据也可以 被多个线程共享。线程的构造? Java.lang.Thread类使用户可以创建和控制自己的线程。?在Java中,虚拟CPU是自动封装进Thread类的实例中, 而Code和Data要通过一个对象传给Thread类的构造函数。线程的创建? 线程的Code和Data构成线程体。线程体决定了线程的行为。? Java中线程体由Thread类的 run( ) 方法定义,该方法 定义了线程的具体行为并指定了线程要操作的数据。?有两种方式进行run( )方法的定义: 实现 Runnable 接口继承 Thread 类通过实现Runnable 接口创建线程? Runnable 接口只提供了一个public void run( )方法。?定义一个类实现Runnable接口。?将该类的实例作为参数传给Thread类的一个构造函数,从而创建一个线程。线程创建示例Public class ThreadTest{ public static void main(String args[ ]){ Xyz r= new Xyz( ); Thread t = new Thread( r ); t.start( ); }}Class Xyz implements Runnable{ int I ; public void run( ){ while( true){ System.out.println(“Hello”+I++); if (I==5) break ; } } }CPUCodeData线程创建示例线程 t一个线程就是Thread类的一个实例。线程是从一个传递给线程的Runnable实例的run( )方法开始执行。线程所操作的数据是来自于该Runnable 类的实例。Xyz的实例 r Xyz类通过继承Thread类创建线程? Thread 类本身实现了Runnable接口。?通过继承Thread类,重写其中的run( )方法定义线程体。?创建该子类的对象创建线程。Public class Counter extends Thread{ public void run( ){ … }}创建与运行线程:Counter ThreadCounter = new Counter( );ThreadCounter.Start( );线程两种创建方法比较?实现Runnable接口的优势:符合OO设计的思想。便于用extends继承其它类。?采用继承Thread类方法的优点:程序代码更简单。?提倡采用第一种方式。线程的运行?新创建的线程不会自动运行。必须调用线程的start( )方法,如: t.start( )?该方法的调用把嵌入在线程中的虚拟CPU置为可运行(Runnable)状态。? Runnable状态意味着该线程可以参加调度,被JVM运行,并不意味着线程会立即执行。线程调度与线程控制?线程调度策略?线程的基本控制线程调度策略? Java中线程调度采用抢先式调度方法。?抢先式调度模式: 许多线程可能是可运行的,但只能有一个线程在运行。该线程将持续运行,直到它自行中止或出现高优先级线程成为可运行的,则该低优先级线程被高优先级线程强占运行。?线程中止的原因可能有多种,如执行Thread.sleep( )调用,或等待访问共享的资源。线程的优先级?每个线程都有优先级,有缺省值,可用 SetPriority( )方法改变。?每个优先级有一个等待池:poolt1t2t3...poolpool线程调度策略? JVM先运行高优先级池中的线程,待该池空后才 考虑低优先级线程。?如果有高优先级线程成为可运行的,则运行它。?抢先式可能是分时的,即每个池中的线程轮流运行; 也可能不是,即线程逐个运行,由JVM而定。?线程一般可用sleep( )保证给其他
文档评论(0)