Java多线程-(1)概念与原理
来源:互联网 发布:网络教育自我鉴定 编辑:程序博客网 时间:2024/06/05 03:43
一、操作系统中线程和进程的概念
现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。
线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。
“同时”执行是人的感觉,在线程之间实际上轮换执行。
对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同的内存块,因此进程之间的通信相对困难。
实际上,操作的系统的多进程实现了多任务并发执行,程序的多线程实现了进程的并发执行。多任务、多进程、多线程的前提都是要求操作系统提供多任务、多进程、多线程的支持。
在Java程序中,JVM负责线程的调度。线程调度是指按照特定的机制为多个线程分配CPU的使用权。
调度的模式有两种:分时调度和抢占式调度。分时调度是所有线程轮流获得CPU使用权,并平均分配每个线程占用CPU的时间;抢占式调度是根据线程的优先级别来获取CPU的使用权。JVM的线程调度模式采用了抢占式模式。
所谓多线程:
所谓的“并发执行”、“同时”其实都不是真正意义上的“同时”。众所周知,CPU都有个时钟频率,表示每秒中能执行cpu指令的次数。在每个时钟周期内,CPU实际上只能去执行一条(也有可能多条)指令。操作系统将进程线程进行管理,轮流(没有固定的顺序)分配每个进程很短的一段是时间(不一定是均分),然后在每个线程内部,程序代码自己处理该进程内部线程的时间分配,多个线程之间相互的切换去执行,这个切换时间也是非常短的。因此多任务、多进程、多线程都是操作系统给人的一种宏观感受,从微观角度看,程序的运行
二、常见线程名词解释
主线程:JVM调用程序mian()所产生的线程。
当前线程:这个是容易混淆的概念。一般指通过Thread.currentThread()来获取的进程。
后台线程:指为其他线程提供服务的线程,也称为守护线程。JVM的垃圾回收线程就是一个后台线程。
前台线程:是指接受后台线程服务的线程,其实前台后台线程是联系在一起,就像傀儡和幕后操纵者一样的关系。傀儡是前台线程、幕后操纵者是后台线程。由前台线程创建的线程默认也是前台线程。可以通过isDaemon()和setDaemon()方法来判断和设置一个线程是否为后台线程。
三、Java中的线程
在Java中,“线程”指两件不同的事情:
1、java.lang.Thread类的一个实例;
1、java.lang.Thread类的一个实例;
2、线程的执行。
使用java.lang.Thread类或者java.lang.Runnable接口编写代码来定义、实例化和启动新线程。
一个Thread类实例只是一个对象,像Java中的任何其他对象一样,具有变量和方法,生死于堆上。
Java中,每个线程都有一个调用栈,即使不在程序中创建任何新的线程,线程也在后台运行着。
一个Java应用总是从main()方法开始运行,mian()方法运行在一个线程内,它被称为主线程。
一旦创建一个新的线程,就产生一个新的调用栈。
线程总体分两类:用户线程和守候线程。
当所有用户线程执行完毕的时候,JVM自动关闭。但是守候线程却不独立于JVM,守候线程一般是由操作系统或者用户自己创建的。
相关引用:
http://lavasoft.blog.51cto.com/62575/27069
0 0
- Java多线程-(1)概念与原理
- Java多线程(1):概念与原理
- Java多线程-概念与原理
- Java多线程-概念与原理
- 多线程(1)-概念与原理
- Java多线程系列1(概念和原理)
- java多线程概念和原理
- java多线程:概念和原理
- Java 多线程(一) 基础知识与概念
- Java 多线程(一) 基础知识与概念
- Java线程-1:概念与原理
- Java线程(一)-概念与原理
- Java线程:概念与原理(一)
- Java线程:概念与原理(一)
- java多线程学习1(补充)-线程的概念和原理
- Java线程:概念与原理
- Java线程:概念与原理
- Java线程:概念与原理
- 用List实现Stack基本功能
- 【4】coco2d-x核心类之CCDirector
- WinDBG常用断点命令
- CocosStudio 学习笔记 之 开关、进度条、步进器也,Button触摸事件的监听
- 真心的被android中的targetSdkVersion折磨了两天。配置它一直报空指针。不兼容造成的
- Java多线程-(1)概念与原理
- Python学习笔记(六)抽象(上)
- 基于比较的排序算法的最优下界为什么是O(nlogn)
- git学习
- Android之rild进程启动源码分析
- 认真是我们最好的人生态度
- 配置 Sublime Text 方便查看Scala 编译器的解析结果
- Linux获取网页源码的几种方法
- 【EXCEL】update拷贝数字