热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java多线程(一)基础知识与概念

多线程Multi-Thread基础线程概念线程就是程序中单独顺序的流控制。线程本身不能运行,它只能用于程序中。说明:线程是程序内的顺序控制流,只能使用分配给程序的资源和环境。进程进

多线程Multi-Thread 基础

线程概念

  线程就是程序中单独顺序的流控制。

  线程本身不能运行,它只能用于程序中。

  说明:线程是程序内的顺序控制流,只能使用分配给程序的资源和环境。

 

进程

  进程:执行中的程序。

  程序是静态的概念,进程是动态的概念。

  一个进程可以包含一个或多个线程。

  一个进程至少要包含一个线程。

 

线程与进程的区别

  多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响。

  线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换负担比进程切换的负担要小

  多线程程序比多进程程序需要更少的管理费用。

  进程是重量级的任务,需要分配给它们独立的地址空间,进程间通信是昂贵和受限的,进程间的转换也是很需要花费的。

  另一方面,线程是轻量级的选手,它们共享相同的地址空间并且共同分享同一个进程,线程间的通信是便宜的,线程间的转换也是低成本的。

 

单线程

  单个程序中只有一个线程就是单线程。  

  当程序启动运行时,就自动产生一个线程,主方法main就在这个主线程上运行。我们的程序都是由线程来执行的。

 

多线程

  多线程指在单个程序中可以同时运行多个不同的线程执行不同的任务。

  多线程编程的目的,就是“最大限度地利用CPU资源”,当某一线程的处理不需要占用CPU而只和IO等资源打交道时,让需要占用CPU的其他线程有机会获得CPU资源。从根本上说,这就是多线程编程的最终目的。

  一个程序实现多个代码同时交替运行就需要产生多个线程。

  CPU随机地抽出时间,让我们的程序一会做这件事情,一会做另外的事情。

  从宏观角度来看,多个线程在同时执行(宏观并行),但是微观上来看,处理器的个数决定了某一个时刻可以同时运行的最大线程数,如单核CPU某一时刻只能有一个线程在执行(微观串行),双核的CPU在某一个时刻,最多可以运行两个线程,可以做到微观并行。

 

Java中的多线程

  同其他大多数编程语言不同,Java内置支持多线程编程(Multithreaded Programming)。

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

  多任务处理被所有的现代操作系统所支持。然而,多任务处理有两种截然不同的类型:基于进程的基于线程的

  1.基于进程的多任务处理是更熟悉的形式。进程(process)本质上是一个执行的程序。因此基于进程的多任务处理的特点是允许你的计算机同时运行两个或更多的程序。

  举例来说,基于进程的多任务处理使你在运用文本编辑器的时候可以同时运行Java编译器。

  在基于进程的多任务处理中,程序是调度程序所分派的最小代码单位。

  2.而在基于线程(thread-based)的多任务处理环境中,线程是最小的执行单位。

  这意味着一个程序可以同时执行两个或者多个任务的功能。

  例如,一个文本编辑器可以在打印的同时格式化文本。

 

Java线程模型

  Java多线程的优点就在于取消了主循环/轮询机制。一个线程可以暂停而不影响程序的其他部分。

  多线程允许活的循环在每一帧间隙中沉睡一秒而不暂停整个系统。

 

线程组

  所有线程都隶属于一个线程组。那可以是一个默认线程组,也可以是一个创建线程时明确指定的组。

  说明:

  在创建之初,线程被限制到一个组里,而且不能改变到一个不同的组。

  若创建多个线程而不指定一个组,它们就会与创建它的线程属于同一个组。

 

参考资料

  圣思园张龙老师Java SE系列视频教程。

 

来源:http://www.cnblogs.com/mengdd/archive/2013/02/16/2913628.html

 


推荐阅读
  • Java类加载详解(类的生命周期)
    https:www.cnblogs.comjhxxbp10900405.html类从被加载到虚拟机内存开始,到卸载出内存为止。解析阶段在某些情况下可以在初始化后再 ... [详细]
  • 深入解析Java中的锁类型及其应用场景
    本文详细介绍了Java中常见的锁类型,包括乐观锁与悲观锁、独占锁与共享锁、互斥锁与读写锁、可重入锁、公平锁与非公平锁、分段锁、偏向锁、轻量级锁、重量级锁以及自旋锁。每种锁的特性、作用及适用场景均有所涉及。 ... [详细]
  • 本文详细探讨了在Windows Server 2003环境下遇到MySQL连接失败(错误代码10061)的解决方案,包括通过卸载特定的Windows更新和调整系统注册表设置的方法。 ... [详细]
  • 在现代多线程编程中,Lock接口提供的灵活性和控制力超越了传统的synchronized关键字。Lock接口不仅使锁成为一个独立的对象,还提供了更细粒度的锁定机制,例如读写锁(ReadWriteLock)。本文将探讨如何利用ReentrantReadWriteLock提高并发性能。 ... [详细]
  • 手把手教你构建简易JSON解析器
    本文将带你深入了解JSON解析器的构建过程,通过实践掌握JSON解析的基本原理。适合所有对数据解析感兴趣的开发者。 ... [详细]
  • 本文档提供了几个经典的Java编程示例,包括多线程处理、基本程序结构以及简单的逻辑运算,旨在帮助初学者更好地理解和掌握Java语言的核心特性。 ... [详细]
  • 下面根据配置文件,来说明一些底层与webservices的关系:回顾一下servlet的映射模式。我们知道,servlet是从javax.servlet.http.HttpServ ... [详细]
  • 深入理解JVM内存区域与配置优化
    本文详细介绍了Java虚拟机(JVM)内存区域的划分及其背后的原理,重点探讨了不同内存区域的功能及垃圾回收策略。文章还提供了如何通过JVM参数优化内存管理的实用建议。 ... [详细]
  • CyclicBarrier是一种同步辅助类,能够在多个线程到达某个屏障点时进行阻塞,直到所有参与的线程都达到这一屏障点后,所有线程才继续执行。本文将详细介绍CyclicBarrier的工作原理及应用场景。 ... [详细]
  • java锁策略
    文章目录锁的分类一、乐观锁VS悲观锁二、读写锁三、可重入锁VS不可重入锁四、重量级锁VS轻量级锁五、公平锁VS非公平锁六、自旋锁VS挂起等待锁七、锁升级策略1、无锁: ... [详细]
  • 本文详细探讨了 Java 中 Daemon 线程的特点及其应用场景,并深入分析了 Random 类的源代码,帮助开发者更好地理解和使用这些核心组件。 ... [详细]
  • 本文详细探讨了Java中多线程的概念,包括并行与并发的区别,并通过具体实例展示了如何在Java中实现多线程操作,如通过继承Thread类、实现Runnable接口和使用Callable接口等方法。 ... [详细]
  • 深入理解GoF设计模式之单例模式
    本文详细介绍了单例模式,这是一种确保类的实例在整个应用程序生命周期中始终保持唯一的创建型设计模式。文章不仅探讨了单例模式的基本概念和优势,还分析了其潜在的缺点,如违反单一职责原则。此外,文中提供了多种实现单例模式的方法,包括饿汉式、懒汉式、基于DCL的双重检查锁、静态内部类以及基于枚举的实现。 ... [详细]
  • 本文档详细规划了从基础到高级的软件测试学习路径,包括但不限于测试基础、Linux和数据库、功能测试、Python编程、接口测试、性能测试、金融项目实战、UI自动化测试等内容,旨在为初学者和进阶者提供全面的学习指导。 ... [详细]
  • [TOC]Process的几个用法和守护进程一、Process的join用法话不多说,直接上代码二、Process的pid和ppid用法需要先导入os模块站在当前进程的角度:os. ... [详细]
author-avatar
--驭风--
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有