摘要:多线程编程是现代软件技术中很重要的一个环节。要弄懂多线程,这就要牵涉到多进程。本文主要以多线程编程以及多线程编程相关知识而做出的一些结论。
什么是多线程编程?
多线程编程技术是Java语言的重要特点。多线程编程的含义是将程序任务分成几个并行的子任务。特别是在网络编程中,你会发现很多功能是可以并发执行的。比如网络传输速度较慢、用户输入速度较慢,你可以用两个独立的线程去完成这两个功能,而不影响正常的显示或其它功能。
多线程是与单线程比较而言的,普通的Windows采用单线程程序结构,其工作原理是:主程序有一个消息循环,不断从消息队列中读入消息来决定下一步所要干的事情,一般是针对一个函数,只有等这个函数执行完之后,主程序才能接收另外的消息来执行。比如子函数功能是在读一个网络数据,或读一个文件,只有等读完这个数据或文件才能接收下一个消息。在执行这个子函数过程中你什么也不能干。但往往读网络数据和等待用户输入有很多时间处于等待状态,多线程利用这个特点将任务分成多个并发任务后,就可以解决这个问题。
多线程编程基础知识详解
一、进程
1.程序:由源代码生成的可执行应用。(如:QQ.app)
2.进程:一个正在运行的程序可以看做一个进程。(正在运行的QQ就是一个进程),进程拥有独立运行所需的全部资源。
3.线程:程序中独立运行的代码段。(如:接收QQ消息的代码块)
一个进程是由一个和多个线程组成,进程只负责资源的调度和分配,线程才是程序真正的执行单元,负责代码的执行。
二、单线程
1、每个正在运行的程序(即进程),至少包含一个线程,这个线程叫主线程。
2、主线程在程序启动时被创建,用于执行main函数。
3、只有一个主线程的程序,称作单线程程序。
4、主线程负责执行程序所有的代码(UI展现以及刷新,网络请求,本地请求)。这些代码只能顺序执行,无法并发执行。
注意:UI展现和刷新只能写在主线程中。
三、多线程
1、拥有多个线程的程序,称作多线程程序。
2、iOS允许用户自己开辟新的线程,相对于主线程来说,这些线程,称作子线程。
3、子线程和主线程都是独立运行的单元,各自的执行互不影响,因此能够并发执行。
补充的多线程的基本知识
4、iOS默认给主线程分配1M的栈空间,默认给子线程分配512K的栈空间。(分配的字节数必须是4K的整数倍)
5、分配的空间用来存放线程中为变量开辟的空间,一般情况下足够使用。
6、与栈空间的使用方式不同,主线程和子线程共用同一块内存空间。
7、程序入口处默认设置了自动释放池,由主线程负责执行代码。子线程新开辟的内存不在主线程管辖范围内(线程之间互不干扰,相互独立),所以子线程为对象开辟的空间不会自动释放,要手动为子线程添加自动释放池。
8、短时间内使用静态方法开辟大量内存空间或使用循环使用便利构造器,会造成内存瞬间集聚,程序carsh掉,所以要写@autorelease pool。
9、多线程的种类
脱离线程:线程结束后被销毁,子线程可能是脱离线程。
四、单、多线程的区别
单线程程序:只有一个线程,代码顺序执行,容易出现代码阻塞(页面假死)
多线程程序:有多个线程,线程之间独立运行,能有效的避免代码阻塞,并且提高程序的运行性能。
五、JVM与多线程
Java编写的程序都运行在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。
每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程 序代码的运行都是以线程来运行的。JVM找到程序程序的入口点main(),然后运行main()方法,这样就产生了一个线程,这个线程称之为主线程。当 main方法结束后,主线程运行完成。JVM进程也随即退出。
操作系统将进程线程进行管理,轮流(没有固定的顺序)分配每个进程很短的一段时间(不一定是均分),然后在每个进程内部,程序代码自己处理该进程内部线程的时间分配,多个线程之间相互的切换去执行,这个切换时间也是非常短的。
技术专区
- mybatis动态sql详解
- 用VHDL语言设计数据传输系统中的HDB3编码器
- 裸机程序如何驱动硬件?看前辈是怎么说的
- 应用面向对象编程SoC原则的典型示例
- 嵌入式开发之java常用开发工具介绍