1、进程和线程

      进程,是一个正在运行的程序实体,windows下常见的就是xxx.exe,在任务管理器中可以看见很多个进程。它是线程的容器。

线程,是进程中的一个执行流。在单线程编程中,我们的程序只有一个执行流:主线程的main方法。流,表明执行的过程是有顺序的,如main函数中的语句需要一条一条的按顺序执行,第一条语句没执行完,就不能去执行第二条语句。

可见,单线程编程是有限制的,那就是我们的语句只能串行执行,不可能发生某些语句同时执行的现象。有时我们希望某些代码并行执行,就好比我们一边吃饭,一边看电视。这个时候,就需要使用多线程编程技术了。

      需要注意的是:一个程序至少有一个线程,那就是主线程,它对应的方法是main方法。那么,其他线程的创建,就需要借助某一个先前已经存在的线程去创建和引发。这个先前存在的线程可以是主线程的main方法,也可以是被main创建的新的线程。

如下图,主线程中,运行到某个时刻,创建了(至于怎么创建新的线程稍后会讲解)新的线程thread-1,从此,CPU就比以前"忙"起来了,因为它要去执行2个线程总的代码。真的是“同时执行”2个线程的代码吗?答案是否定的。CPU本身是没有所谓的并行执行的能力的,也无所谓多线程,多线程是本机操作系统支持的。操作系统将进程线程进行管理,轮流(没有固定的顺序)分配每个进程很短的一段是时间(不一定是均分)。然后在每个线程内部,程序代码自己处理该进程内部线程的时间分配,多个线程之间相互的切换去执行,这个切换时间也是非常短的。因此多任务、多进程、多线程都是操作系统给人的一种宏观感受,从微观角度看,程序的运行是异步执行的。

我们知道就可以了,关于底层CPU到底如何做,我们并不需要关心。我们关心的是如何通过代码去创建和操作我们的线程。我们就当我们的线程都是“并行执行的”。

2、调用栈

什么是调用栈?在以前单线程编程中,就拿main函数来说吧。以一个列子来说明。

public class Test  {

    public static int Add(int x,int y)
{
return x+y;
} public static void main(String[] args)
{ int x =2,y = 5;
int re = Add(x,y); System.out.println(re); } }

操作系统调用main函数,因为main函数是程序的入口,那么main函数就入栈了,main会占用一定的内存,因为里面有参数args和局部变量x,y,re。当执行到Add函数调用时,这时main函数“挂起”,执行流进入Add函数,Add函数入栈,同样系统也会为Add函数分配临时内存空间,当Add函数执行完,Add函数出栈,返回结果,它占用的内存被回收,执行流再次回到main函数,运行到println函数,println函数入栈。。。。。println出栈,执行流再回到main,main执行完毕,程序结束,系统回收本程序的内存。

注意:这里的栈只是一个操作系统管理函数调用的模型而已,并不是数据结构中的栈,只不够二者的逻辑结构是一致的:FILO。

在多线程编程中,每一个线程都有自己的一个调用栈,来管理自己的函数调用。

3、需要记住的事项

一、线程之间共享内存数据,这使得数据访问更加的快捷,方便。

二、一个使用多线程的程序,如果有任何一个线程没有结束,那么,这个程序就不会结束运行。

三、JVM的线程调度模式采用了抢占式模式。抢占式调度是根据线程的优先级别来获取CPU的使用权。但是这个也并不一定,CPU执行线程的顺序由操作系统和JVM共同

决定。但每一个线程的单次执行时间是一定的,这个时间叫时间片,在Linux系统中,默认时间片为1/100s。

java多线程编程(一基础概念)的更多相关文章

  1. java多线程编程01---------基本概念

    一. java多线程编程基本概念--------基本概念 java多线程可以说是java基础中相对较难的部分,尤其是对于小白,次一系列文章的将会对多线程编程及其原理进行介绍,希望对正在多线程中碰壁的小 ...

  2. Win32多线程编程(1) — 基础概念篇

      内核对象的基本概念 Windows系统是非开源的,它提供给我们的接口是用户模式的,即User-Mode API.当我们调用某个API时,需要从用户模式切换到内核模式的I/O System Serv ...

  3. Java多线程编程总结一:多线程基本概念

    Java多线程编程总结一 – 初识多线程 进程.多进程.线程.多线程的概念 进程(process):CPU的执行路径.通俗的说就是系统中正在运行的程序.比如我们打开了浏览器.QQ等等,这些程序一旦被打 ...

  4. ★Java多线程编程总结 系列 转

    下面是Java线程系列博文的一个编目:   Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Jav ...

  5. Java多线程编程详解

    转自:http://programming.iteye.com/blog/158568 线程的同步 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题.Ja ...

  6. Java多线程编程总结(精华)

    Java多线程编程总结 2007-05-17 11:21:59 标签:多线程 java 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http ...

  7. (转)Java多线程编程总结

    -------------------------------------------------------------------------------------------------   ...

  8. Java多线程编程核心技术

    Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...

  9. 《Java多线程编程核心技术》推荐

    写这篇博客主要是给猿友们推荐一本书<Java多线程编程核心技术>. 之所以要推荐它,主要因为这本书写得十分通俗易懂,以实例贯穿整本书,使得原本抽象的概念,理解起来不再抽象. 只要你有一点点 ...

  10. Java多线程编程实战读书笔记(一)

    多线程的基础概念本人在学习多线程的时候发现一本书——java多线程编程实战指南.整理了一下书中的概念制作成了思维导图的形式.按照书中的章节整理,并添加一些个人的理解.

随机推荐

  1. 在JavaScript中,this关键字指什么?

    指向对象.window.方法. 例子1 function a(){//当前调用栈是a,因此a的调用位置是全局作用域 console.log('a'); b();// b的调用位置 } function ...

  2. cocos2d 单点触控

    // // Single.hpp // dev // // Created by sun on 15/12/20. // // #ifndef Single_hpp #define Single_hp ...

  3. 关于 Xcode bitcode 错误

    关于 bitcode 报错 有类似上图关于bitcode的错误用以下方法解决:

  4. 【BZOJ】1821: [JSOI2010]Group 部落划分 Group(最小生成树+贪心)

    http://www.lydsy.com:808/JudgeOnline/problem.php?id=1821 这题裸题. 本题要求最短距离最长,很明显,我们排序. 这里存在贪心,即我们把边权最小的 ...

  5. [NOI 2014]做题记录

    [NOI2014]起床困难综合症 按位贪心 #include <algorithm> #include <iostream> #include <cstring> ...

  6. BJOI2015 Day2

    轮到罗剑桥出题了 这是什么风格,中文名称与英文名称分明对不上吗233 T1: 似乎只会做这道题23333 A....BE ........ C....DF 据题意数学变形得A-C<=B-D,B- ...

  7. 转载--thinkphp框架的路径问题 - 总结

    转自:http://blog.sina.com.cn/s/blog_827ddd950100ulyv.html TP中有不少路径的便捷使用方法,比如模板中使用的__URL__,__ACTION__等, ...

  8. C# 从数据库中删除,插入,修改 索引选中条目

    一.删除 1. ) { var currentSelectIndex = usrListView.SelectedIndex; var item = usrView[currentSelectInde ...

  9. 【应用笔记】【AN003】VC++环境下基于以太网的4-20mA电流采集

    简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍了以太网接口的4-20mA电流采集模块在VC++环境下进行温度采集,实现WINDOWS平台对数据的采集.分析及显示 ...

  10. 《Java核心技术卷二》笔记(一)流与文件

    一.流的概念 在Java中,可以提供字节序列的对象,或者可以接收字节序列的对象,都可以抽象成流.系统中的文件,网络,内存这些设备都可以读入或者写入字节,自然也可以用流的方式来操作.能向程序中提供字节序 ...