多线程-基础篇

线程概念

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

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

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

进程

  进程:执行中的程序。

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

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

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

线程与进程的区别

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

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

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

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

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

单线程

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

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

多线程

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

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

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

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

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

Java中的多线程

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

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

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

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

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

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

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

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

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

Java线程模型

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

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

线程组

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

  说明:

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

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

时间: 2024-10-29 09:00:08

多线程-基础篇的相关文章

Linux C 程序设计多线程基础篇

   Linux C 程序设计多线程基础篇 题记:因为 Linux 网络入侵检测系统的设计与实现希望使用多线程,因此希望系统的学习一下 Linux C程序设计多线程的知识 注意事项:因为 pthraed 库不是 Linux 系统默认的库,因此在进行多线程开发的时候,需要加上头文件#include <pthread.h>,编译时要加参数 -lpthread;了:gcc thread.c -o thread -lpthread. 进程和线程: 进程是程序执行,资源分配的基本单位,每个进程都拥有自己

并发编程之多线程基础篇及面试

线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行.也可以把它理解为代码运行的上下文.所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务.通常由操作系统负责多个线程的调度和执行. 使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下可以释放一些珍贵的资源如内存占用等等. 如果有大量

多线程基础篇(一)

线程之间方法区和堆内存共享,栈内存不共享;哪个线程调用sleep()方法,哪个线程就进入睡眠状态,与哪个对象调用该方法无关.start()方法的作用是创建一个线程的栈内存,该方法与普通方法相同,执行完立刻销毁. package test1; public class RacerRunnable implements Runnable{ /** * 龟兔赛跑多线程 */ public String winner; public void run() { for(int step = 1; step

多线程(基础篇1)

在多线程这一系列文章中,我们将讲述C#语言中多线程的相关知识,在多线程(基础篇)中我们将学习以下知识点: 创建线程 中止线程 线程等待 终止线程 确定线程的状态 线程优先级 前台线程和后台线程 向线程传递参数 使用C#的lock关键字锁定线程 使用Monitor锁定线程 处理异常 一.创建线程 在整个系列文章中,我们主要使用Visual Studio 2015作为线程编程的主要工具.在C#语言中创建.使用线程只需要按以下步骤编写即可: 1.启动Visual Studio 2016,新建一个控制台

多线程(基础篇3)

在上一篇多线程(基础篇2)中,我们主要讲述了确定线程的状态.线程优先级.前台线程和后台线程以及向线程传递参数的知识,在这一篇中我们将讲述如何使用C#的lock关键字锁定线程.使用Monitor锁定线程以及线程中的异常处理. 九.使用C#的lock关键字锁定线程 1.使用Visual Studio 2015创建一个新的控制台应用程序. 2.双击打开"Program.cs"文件,然后修改为如下代码: 1 using System; 2 using System.Threading; 3 u

多线程的那点儿事(基础篇)

多线程编程是现代软件技术中很重要的一个环节.要弄懂多线程,这就要牵涉到多进程?当然,要了解到多进程,就要涉及到操作系统.不过大家也不要紧张,听我慢慢道来.这其中的环节其实并不复杂. (1)单CPU下的多线程 在没有出现多核CPU之前,我们的计算资源是唯一的.如果系统中有多个任务要处理的话,那么就需要按照某种规则依次调度这些任务进行处理.什么规则呢?可以是一些简单的调度方法,比如说 1)按照优先级调度 2)按照FIFO调度 3)按照时间片调度等等 当然,除了CPU资源之外,系统中还有一些其他的资源

多线程(基础篇1)转载

在多线程这一系列文章中,我们将讲述C#语言中多线程的相关知识,在多线程(基础篇)中我们将学习以下知识点: 创建线程 中止线程 线程等待 终止线程 确定线程的状态 线程优先级 前台线程和后台线程 向线程传递参数 使用C#的lock关键字锁定线程 使用Monitor锁定线程 处理异常 一.创建线程 在整个系列文章中,我们主要使用Visual Studio 2015作为线程编程的主要工具.在C#语言中创建.使用线程只需要按以下步骤编写即可: 1.启动Visual Studio 2016,新建一个控制台

Spark性能优化指南——基础篇

前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作,应用范围与前景非常广泛.在美团•大众点评,已经有很多同学在各种项目中尝试使用Spark.大多数同学(包括笔者在内),最初开始尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行速度更快.性能更高. 然而,通过Spark开发出高性能的大数据计算作业,并不是那么简单的.如果没有对Spar

秒杀多线程第一篇 多线程笔试面试题汇总 ZZ 【多线程】

http://blog.csdn.net/morewindows/article/details/7392749 系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性.系列中不但会详细讲解多线程同步互斥的各种“招式”,而且会进一步的讲解多线程同步互斥的“内功心法”.有了“招式”和“内功心法”,相信你也能对多线程挥洒自如,在笔试面试中顺利的秒杀多线程试题. ----------------------