热门标签 | 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虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 深入理解线程、进程、多线程、线程池
    本文以QT的方式来走进线程池的应用、线程、进程、线程池、线程锁、互斥量、信号量、线程同步等的详解,一文让你小白变大神!为什么要使用多线程、线程锁、互斥量、信号量?为什么需要线程 ... [详细]
  • 我所理解的JMM 2 new原子性
    概述文本探讨构造函数是否为原子性问题。案例我们首先如下代码:publicclassPerson{publicintage;publicPerson(){age ... [详细]
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社区 版权所有