JAVA中线程讲解.ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
运行结果: Thread-0卖掉一张票,现在剩余:2 Thread-1卖掉一张票,现在剩余:1 Thread-1卖掉一张票,现在剩余:0 Thread-0卖掉一张票,现在剩余:-1 没有synchronized修饰 比较两次运行结果 运行结果: Thread-0卖掉一张票,现在剩余:2 Thread-1卖掉一张票,现在剩余:1 Thread-1卖掉一张票,现在剩余:0 有synchronized修饰 10.3.10 死锁 因为线程可以阻塞,并且对象可以具有同步控制方法,用以防止别的线程在锁还没有释放的时候就访问这个对象。 所以就可能出现这种情况:某个线程在等待另一个线程,而后者又在等待别的线程,这样一直下去,直到这个链条上的线程又在等待第一个线程的释放锁。 你将得到一个线程之间相互等待的连续循环,没有哪个线程能继续。这称之为“死锁”(deadlock)。 死锁的四个必要条件: 互斥条件:一个资源每次只能被一个进程使用。 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 10.4 总结 线程和进程的区别 线程的优点 JAVA线程的实现 线程的状态和调度 多线程同步问题 死锁 第十章 JAVA线程 本章主要内容 10.1 线程简介 10.2 为什么使用线程 10.3 JAVA线程 10.4 总结 10.1 简介 10.1.1 什么是线程 一般来说,我们把正在计算机中执行的程序叫做“进程”(Process) ,而不将其称为程序(Program)。所谓“线程”(Thread),是“进程”中某个单一顺序的控制流。 线程在程序中是独立的、并发的执行路径 线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。 10.2 线程和进程 进程就是在某种程度上相互隔离的、独立运行的程序。 线程是进程内部的单一控制序列流。一个进程可以具有多个并发的线程。 进程可以支持多个线程,它们看似同时执行,但互相之间并不同步。(CPU只是将时间切割为时间片,然后将时间片分配给这些线程,CPU的高速计算能力,给人的感觉就像是多个线程在同时执行一样。) 进程中的所有线程共享进程的虚拟地址空间,这意味着所有线程都可以访问进程的全局变量和资源。这一方面为编程带来了方便,但另一方面也容易造成冲突。 10.3 JAVA线程 10.3.1 实现方式 Java程序通过流控制来执行程序流,程序中单个顺序的流控制称为线程,多线程则指的是在单个程序中可以同时运行多个不同的线程,执行不同的任务 Java里面实现多线程,有2个方法 继承Thread类(位于java.lang包内) 实现Runnable接口 一般鼓励使用第二种方法,因为Java里面只允许单一继承,但允许实现多个接口。第二个方法更加灵活 10.3 JAVA线程 每个线程都是通过某个特定Thread对象所对应的方法run( )来完成其操作的 方法run( )称为线程体 使用start() 方法启动线程 启动线程是使线程进入到可运行(runnable)状态,并不一定立即开始执行该线程 public class HelloThread extends Thread{ public void run() { System.out.println(I extend \Thread\.); } } Java实现线程,方法一:继承Thread 继承Thread 线程体,所有的操作都发生在线程体中 public class TestHello { public static void main(String[] args) { HelloThread helloThread = new HelloThread(); helloThread.start(); } } start()方法启动线程 运行结果:I extend Thread. Java实现线程,方法二:实现Runnable接口 public class HelloRunner implements Runnable { public void run() { System.out.println(I implements \“Runabl

文档评论(0)

moon8888 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档