和其他多数计算机语言不同,Java内置支持多线程编程(multithreaded programming)。

多线程程序包含两条或两条以上并发运行的部分。程序中每个这样的部分都叫一个线程(thread),每个线程都有独立的执行路径。因此,多线程是多任务处理的一种特殊形式。

你一定知道多任务处理,因为它实际上被所有的现代操作系统所支持。然而,多任务处理有两种截然不同的类型:基于进程的和基于线程的。认识两者的不同是十分重要的。

对很多读者,基于进程的多任务处理是更熟悉的形式。进程(process)本质上是一个执行的程序。因此,基于进程(process-based) 的多任务处理的特点是允许你的计算机同时运行两个或更多的程序。举例来说,基于进程的多任务处理使你在运用文本编辑器的时候可以同时运行Java编译器。在基于进程的多任务处理中,程序是调度程序所分派的最小代码单位。

在基于线程(thread-based) 的多任务处理环境中,线程是最小的执行单位。这意味着一个程序可以同时执行两个或者多个任务的功能。例如,一个文本编辑器可以在打印的同时格式化文本。所以,多进程程序处理“大图片”,而多线程程序处理细节问题。

多线程程序比多进程程序需要更少的管理费用。进程是重量级的任务,需要分配它们自己独立的地址空间。进程间通信是昂贵和受限的。进程间的转换也是很需要花费的。另一方面,线程是轻量级的选手。它们共享相同的地址空间并且共同分享同一个进程。线程间通信是便宜的,线程间的转换也是低成本的。当Java程序使用多进程任务处理环境时,多进程程序不受Java的控制,而多线程则受Java控制。

多线程帮助你写出CPU最大利用率的高效程序,因为空闲时间保持最低。这对Java运行的交互式的网络互连环境是至关重要的,因为空闲时间是公共的。举个例子来说,网络的数据传输速率远低于计算机处理能力,本地文件系统资源的读写速度远低于CPU的处理能力,当然,用户输入也比计算机慢很多。在传统的单线程环境中,你的程序必须等待每一个这样的任务完成以后才能执行下一步——尽管CPU有很多空闲时间。多线程使你能够获得并充分利用这些空闲时间。

如果你在Windows 98 或Windows 2000这样的操作系统下有编程经验,那么你已经熟悉了多线程。然而,Java管理线程使多线程处理尤其方便,因为很多细节对你来说是易于处理的。

java线程入门到精通_JAVA入门到精通6.1-Java线程的概念相关推荐

  1. java类的主体是_java入门知识

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类. 此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java ...

  2. java线程如何避免死锁_Java面试问题,如何避免Java线程中的死锁?

    如何避免Java中的死锁?是流行的Java面试问题之一,也是多线程的流行话题之一.尽管问题看起来很简单,但是一旦深入,大多数Java开发人员就会陷入困境. 面试问题以"什么是死锁?" ...

  3. java睡眠后继续执行_Java高级编程基础:如何使用线程的休眠,中断和连接

    线程休眠和中断 我们知道了在编程过程中创建线程,并启动以后,线程会交由操作系统来管理调度执行一个我们指定的计算任务. 如果没有其它异常情况出现的话,它会持续运行直到我们实现的run()方法执行完毕为止 ...

  4. java面试常见面试问题_Java面试准备:15个Java面试问题

    java面试常见面试问题 并非所有的访谈都将重点放在算法和数据结构上-通常,访谈通常只侧重于您声称是专家的语言或技术.在此类访谈中,通常没有任何"陷阱"问题,而是它们要求您利用内存 ...

  5. java怎么给时间赋值_Java 8新时间日期库java.time的使用示例

    Instant--它代表的是时间戳 LocalDate--不包含具体时间的日期,比如 2020-01-14.它可以用来存储生日,周年纪念日,入职日期等. LocalTime--它代表的是不含日期的时间 ...

  6. java calendar去掉时分秒_java 8:只取年月日的java.util.Date(时分秒清零)对象

    废弃的方法(@Deprecated) 如果不想要java.util.Date中的时分秒数据,希望将它清零,只保留年月日,最简单的办法是 调用setHours,setMinutes,setSeconds ...

  7. 世界java大神有哪些_JAVA基础复习1:开始Java世界的第一个程序

    之前,我已经安装好了Java,并且设置好了Java配置.那么来写一段进入Java世界的第一个程序. 1.打开记事本(曾经看过廖大神的一个博客,说是不建议使用Windows自带的记事本,因为有时候会添加 ...

  8. java数组使用实验报告_JAVA数组与类的定义-java实验报告

    JAVA数组与类的定义-java实验报告 JAVA数组与类的定义-java实验报告 .实验目的与要求 1. 熟悉Java类.对象和方法的一般操作练习等. 2. 熟悉数组等的定义和使用. 二.实验内容及 ...

  9. java runtime是什么软件_Java SE Runtime Environment (JRE) 运行Java程序的必备软件

    Java SE Runtime Environment 运行Java程序的必备软件 因JAVA高度的安全性以及跨平台的特性,使得稳居网络应用程序语言的首选,这也使用得越来越多的程序员选择了Java,这 ...

最新文章

  1. 一天 用户旅程_439天的旅程改变了我的生活
  2. tensorflow中的向量范数
  3. Kafka broker配置介绍 (四)
  4. Unity Shader 屏幕后效果——Bloom外发光
  5. iOS学习笔记-自定义过渡动画
  6. matplotlib—patches.Circle
  7. 曾经的8848,远离真实的代价
  8. mybatis-generator-gui--一个mybatis代码自动生成界面工具
  9. Python入门学习三
  10. spring源码系列(一)sring源码编译 spring源码下载 spring源码阅读
  11. 从零开发一款Android RTMP播放器
  12. 怎么用计算机算分数加减法,怎么算分数加减法?怎么教给孩子?
  13. Unity 2D打地鼠游戏
  14. 【已解决】PEP 8: W292 no newline at end of file等相关PEP 8错误与警告
  15. 计算机网络(七):网络安全
  16. Linux 内核编程风格
  17. SQL进阶教程 | 史上最易懂SQL教程!10小时零基础成长SQL大师!!
  18. java导出dbf文件生僻汉字处理
  19. GDB内存断点(Memory break)的使用举例
  20. 华为路由器 IPSec VPN 配置

热门文章

  1. 二十个方法鼓励自己最有效
  2. WIFI加密技术介绍
  3. C++ 获取类成员虚函数地址
  4. error: '[class name]' does not name a type
  5. LibreOJ#6030. 「雅礼集训 2017 Day1」矩阵
  6. 【软件工程实践 · 团队项目】 第一次作业
  7. .net String Formatter 格式转换
  8. Xcode7 低版本iOS系统上下有黑边的问题
  9. 在线CSS3压缩美化格式化
  10. Linux中Shell重定向