• 线程进程Java多线程(一)、理解进程与多线程的概念及关系


    查了好多资料,发现还是不全,干脆自己整理吧,至少保障在我的做法正确的,以免误导读者,也是给自己做个记录吧!

        一、什么是进程?

                    

                简单理解,在多任务系统中,每一个独立运行的程序就是一个进程,也可以理解为当前正在运行的每一个程序都是一个进程。我们当初应用的操纵系统大都是多任务系统的,如:Windows、Linux、Mac OS X、Unix等。因为单个CPU在同一时刻只能执行一个程序,这是铁律。但在系统中单个CPU又怎么能同时执行多个程序呢?实际情况这是由操纵系统负责对CPU资源停止调度和分配管理的,虽然单个CPU在某一时刻只能做一件事,但是它以非常小的时间间隔切换来执行多个程序,人用弱眼根本无法察觉CPU在往返交替执行多个程序,所以给人以在同一时刻同时执行多个程序的感觉。如果我们同时打开两个记事本程序A和B,这就是两个不同的进程,A编辑的文稿不会影响到B。因为每一个进程都有独立的代码和数据存储空间,操纵的都是自己空间的数据,所以互不影响。

        

        二、什么是线程?

        

                   一个进程中可以包含一个或多个线程,一个线程就是程序外部的一条执行线索。在单线程中,当程序启动时,就自动发生了一个线程,这个线程称为主线程。主函数main就是在这个线程上运行的,然后主函数按照程序代码的调用顺序依次往下执行。在这类情况下,当主函数调用了子函数,主函数必须等待子函数返回以后才能继承往下执行,不能实现两段代码交替执行的效果。如果要在一个程序中交替执行多段代码,就需要发生多个线程,并指定每一个线程上所要运行的程序代码,这就是多线程。在Java中创建多线程有两种方法:继承java.lang.Thread类和实现Runnable接口,并调用Thread类的start方法来启动线程。

        线程和进程

        

        三、进程与线程场景分析与理解

        

        

        1>  计算机的核心是CPU,承担了全部的计算任务。它就好比一座工厂,时刻都在运行。为工厂中的每一个部件提供疏浚与处理的服务。

        

        

        

        线程和进程

        

        

        

        2>  假设这座工厂的电力无限,一次只能供给一个车间应用,也就是说一个车间开工的时候,其它车间都必须停工。当面的意思就是说一个CPU同一时间只能执行一个任务(进程)。

        

        

        

        线程和进程

        

        

        

        3>  进程就好比工厂的车间,任一时刻都只有一个车间在开工出产,其它车间都处于停工状态。当面的意思就是说,CPU在任一时刻总是只能运行单个进程,其它进程都处于非活动状态。

        

        线程和进程

        每日一道理
    时间好比一条小溪,它能招引我们奔向生活的海洋;时间如同一叶扁舟,它将帮助我们驶向理想的彼岸;时间犹如一支画笔,它会指点我们描绘人生的画卷。

        

        4>  一个车间里可以有很多个工人,它们协同实现一个任务。比如一个手机出产车间,张三负责主板的安装与调试,李四负责显示屏的测试与加工,王五负责手机零件的组装等。线程就好比这车间里的工人,一个进程包含了多个线程,它们各自负责实现自己的任务

        

        线程和进程

        

        5>  车间里的空间是工人们共享的,比如车间里的很多房间(如:加工房、出产房、组装房等),这些车间里的每一个房间,工人们都是可以随意走动、收支的。这就意味者一个进程的内存空间是共享的,该进程中的全部线程都可以应用这片内存空间

        

        线程和进程

        

        6>  可是车间里每间房间的巨细是不同的。有些房间最多只能包容1个人,比如茅厕,里面有人的时候,你就不能再进去了,需要等里面的人出来了你才能进去。也就是说当一个线程在应用某块共享内存的时候,其它线程必须等待它应用结束以后,其它线程才能应用这块内存

        

        线程和进程

        

        7>  一个访止他人进入的简单方法,就是进入茅厕以后,在外面挂一把锁。先到的人进入茅厕后锁上门,后到的人看到茅厕上锁了,就在门口排队,等锁打开了再进去。这就是"互斥锁"(mutex),避免多个线程同时读写某一块内存区域中的数据。在Java中应用synchronized关键字实现多个线程之间的互斥

        

        线程和进程

        

        8>  还有些房间,可以同时包容N个人,比如说厨房。如果人数大于N,多出来的人数只能在外面等着,等待其它人出来以后才能进去。这就好比某些共享内存区域,只供固定数目的线程拜访。

        

        线程和进程

        

        这时的处理方式就是在门外挂N把锁,进去的人就取一把锁,出来时把锁挂回原处。后到的人发现钥匙架空了,就晓得在门外排队等着了。这类做法叫做“信号量(Semaphore),用来保障多个线程不会互相冲突。

        线程和进程

        

    文章结束给大家分享下程序员的一些笑话语录: 面试官:熟悉哪种语言
    应聘者:JAVA
    面试官:知道什么叫类么
    应聘者:我这人实在,工作努力,不知道什么叫累
    面试官:知道什么是包?
    应聘者:我这人实在 平常不带包 也不用公司准备了
    面试官:知道什么是接口吗?
    应聘者:我这个人工作认真。从来不找借口偷懒
    面试官:知道什么是继承么
    应聘者:我是孤儿没什么可以继承的
    面试官:知道什么叫对象么?
    应聘者:知道,不过我工作努力,上进心强,暂时还没有打算找对象。
    面试官:知道多态么?
    应聘者:知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系??

  • 相关阅读:
    Odoo13在Win10(专业版)中的配置
    我在博客园安家了
    2012笔记
    你给我好好发邮件行不行
    事务经典例子
    轻松实现SQL Server与Access、Excel数据表间的导入导出
    SQL大全
    小笔记
    性能优化
    程序中的异常和错误处理
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3087596.html
Copyright © 2020-2023  润新知