基础篇之多线程总结

1.进程与线程:

线程:一个进程可以拥有多个并行的线程,线程是进程中一个程序执行控制的单元,一个进程中的线程会共享内存地址空间(因为线程所使用的资源是它所在进程的资源),所以访问相同的变量和对象,所以进程内线程之间的数据也是共享的,且线程组的通信是在同一地址空间上进行,所以不需要额外的通信机制,使得传递的消息速度更快,每个线程在栈里面是独立的,单个线程中程序是有序的,一个线程看另一个线程中程序是无序的 ,线程是基于进程的

进程:由cpu,data,code三部分组成,每个进程都是独立的,由系统分配,进程间的切换开销较大,进程基于操作系统;

2.并行与并发

并发:多个线程访问同一份资源

并行:在多个cpu情形下,多个线程同时运行

3.线程数与运行时间

线程数:我们看到的虚拟机里面显示的线程数,是虚拟的线程数,例如单线程,他是将时间分成很多小的时间片,不同的时间片会调用不同的虚拟的线程程序段,当调用这个程序是其他程序会挂起

运行时间:运行时间与实际的是线程数有直接联系,而且过多的线程容易引起并发等问题,所以不一定快

4.开启线程的形式

Thread类:

步骤:

1>定义类继承Thread类;

2>目的是复写run方法,将要让线程运行的代码都存储到run方法中;

3>通过创建Thread类的子类对象,创建线程对象;

4>调用线程的start方法,开启线程,并执行run方法。

Runnable接口

步骤:

1>定义类实现Runnable接口。

2>覆盖接口中的run方法。

3>通过Thread类创建线程对象;

4>将实现了Runnable接口的子类对象作为实际参数传递给Thread类中的构造函数。

5>调用线程的start方法,开启线程,并执行run方法。

Callable接口

步骤:

1>定义类实现callable接口。

2>覆盖接口中的call方法。

3>创建一个可重用的固定线程池

4>将实现了callable接口的子类对象作为实际参数传递给submit类中的构造函数,开启线程池所有线程

5>shutdown停止线程池的所有线程,也可以不采用shutdown,自定义停止线程

Callable 与runnable接口的区别

1>callable定义的是call方法,runnable定义的是run方法

2>callable可抛出异常,run方法不可抛出异常

3>callable有返回值,runnable没有返回值

5. 线程在运行过程中的状态

1>  新生状态:new一个thread类或者其子类之后,就处于新生状态

2>  就绪状态:线程start后,就处于就绪状态

3>  运行状态:运行run方法中的代码,直到调用完成,或者调用其他方法而停止

4>  阻塞状态:处于运行的线程在遇到某些情况后会停止自己的运行,进入阻塞状态,下次运行时会回到停止的状态接着运行(如sleep,jion,io等)

5>  死亡状态:被强制终止(如stop,destroy等),或者运行完成

6. 线程停止的方式

Thread的stop及destroy  Api已经标明已过时,所有多用自己定义的线程停止,启动线程停止后,线程是在一定的延时后最终停止

7. 线程中常用的一些方法

1>  isAlive 线程是否还存活

2>  currentThread  返回当前线程地址

3>  setName 设置名称

4>  getName 获取该线程名称

5>  currentThread. getName获取当前线程名称

6>  setpriority  设置优先级,指的是概率而不是运行顺序

7>  sleep 线程休眠,不会释放锁

8>  wait (Object方法)暂停该线程,会释放锁

9>  notify  (Object方法)唤醒该对象下的单个线程

10> notifyAll (Object方法)唤醒所有该对象下的线程

8. 同步

添加同步的原因:多个线程访问同一份资源,为了确保这份资源的安全所以加入了同步,

过多的同步可能会造成死锁,因为都不肯释放资源。

9. 常用解决死锁的方法

1>  消费者生产者思想法:加入一个标志位,使生产时就不能消费,消费时就不能生产

2>  Timer类来实现等

时间: 2024-08-16 14:24:46

基础篇之多线程总结的相关文章

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

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

多线程(基础篇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

第12篇-JAVA 多线程

第12篇-JAVA 多线程 每篇一句 :不要只看到艰难,要看艰难后面的胜利 初学心得: 敢于尝试,就等于你已经向成功迈出了第一步 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-20| JAVA 多线程 ] 1.进程与线程 1.什么是进程 程序是指令和数据的有序的集合,其本身没有任何运行的含义,是一个静态的概念 进程是一个具有一定独立功能的程序,一个实体 几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程 当一个程序运行时,内部可

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

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

问道python之基础篇【一】 认识python

问道python之基础篇[一] 认识python 1.python的简介 1.1.什么是python? Python是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python语法简洁清晰,特色之一是强制用空白符作为语句缩进. Python具有丰富和强大的库.它常被昵称为胶水语言,能够用其他语言制作的各种模块(尤其是C++)很轻松地联结在一起. 1.2.python的特点 简单,易学,免费.开源,高层语言,移植性,