多线程编程的基础知识点.pdf

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程编程的基础知识点 多线程编程一直是程序员比较头痛和心虚的地方,因为线程执行顺序的不可预知性和调试时候的困难, 让不少人在面对多线程的情况下选择了逃避,采用单线程的方式,其实只要我们对线程有了明确的认识, 再加上 Java 内置的对多线程的天然支持,多线程编程不再是一道难以逾越的鸿沟。 「一」进程、线程、并发执行 关于进程、线程、并发执行的概念,我们先来看下面的一段话: “一般来说,当运行一个应用程序的时候,就启动了一个进程,当然有些会启动多个进程。启动进 程的时候,操作系统会为进程分配资源,其中最主要的资源是内存空间,因为程序是在内存中运行的。 在进程中,有些程序流程块是可以乱序执行的,并且这个代码块可以同时被多次执行。实际上,这 样的代码块就是线程体。线程是进程中乱序执行的代码流程。当多个线程同时运行的时候,这样的执行模 式成为并发执行。 “ 上面这段话引自 51CTO 网站 “熔岩”的博客一篇文章 《Java 多线程编程总结》,读者可参考本文获 得更详细的知识。 下面我以一个日常生活中简单的例子来说明进程和线程之间的区别和联系: 这副图是一个双向多车道的道路图,假如我们把整条道路看成是一个 “进程”的话,那么图中由白 色虚线分隔开来的各个车道就是进程中的各个 “线程”了。 ①这些线程(车道)共享了进程(道路)的公共资源(土地资源)。 ②这些线程 (车道)必须依赖于进程 (道路),也就是说,线程不能脱离于进程而存在 (就像离开 了道路,车道也就没有意义了)。 第 1 页 多线程编程的基础知识点 ③这些线程 (车道)之间可以并发执行 (各个车道你走你的,我走我的),也可以互相同步 (某些 车道在交通灯亮时禁止继续前行或转弯,必须等待其它车道的车辆通行完毕)。 ④这些线程 (车道)之间依靠代码逻辑 (交通灯)来控制运行,一旦代码逻辑控制有误 (死锁,多 个线程同时竞争唯一资源),那么线程将陷入混乱,无序之中。 ⑤这些线程(车道)之间谁先运行是未知的,只有在线程刚好被分配到 CPU 时间片(交通灯变化) 的那一刻才能知道 「二」JVM 与多线程 Java 编写的程序都运行在在 Java 虚拟机 (JVM)中,在 JVM 的内部,程序的多任务是通过线程来实 现的。 每用 java 命令启动一个 java 应用程序,就会启动一个 JVM 进程。在同一个 JVM 进程中,有且只有 一个进程,就是它自己。在这个 JVM 环境中,所有程序代码的运行都是以线程来运行的。JVM 找到程序程 序的入口点 main (),然后运行 main ()方法,这样就产生了一个线程,这个线程称之为主线程。当main 方法结束后,主线程运行完成。JVM 进程也随即退出。 操作系统将进程线程进行管理,轮流 (没有固定的顺序)分配每个进程很短的一段时间 (不一定是 均分),然后在每个进程内部,程序代码自己处理该进程内部线程的时间分配,多个线程之间相互的切换 去执行,这个切换时间也是非常短的。 「三」Java 语言对多线程的支持 Java 语言对多线程的支持通过类 Thread 和接口 Runnable 来实现。这里就不多说了。这里重点强调 两个地方: // 主线程其它代码段 ThreadClass subThread = new ThreadClass(); subThread.start(); // 主线程其它代码段 subThread.sleep(1000); 有人认为以下的代码在调用 start ()方法后,肯定是先启动子线程,然后主线程继续执行。在调 用 sleep ()方法后 CPU 什么都不做,就在那里等待休眠的时间结束。实际上这种理解是错误的。因为: ①start ()方法的调用后并不是立即执行多线程代码,而是使得该线程变为可运行态 (Runnable), 什么时候运行是由操作系统决定的。 ②Thread.sleep ()方法调用目的是不让当前线程独自霸占该进程所获取的 CPU 资源,以留出一定 时间给其他线程执行的机会(也就是靠内部自己协调)。 「四」线程的状态切换

文档评论(0)

小蜗牛 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档