线程和进程有什么差别?Java多线程机制有什么特点?

来源:互联网 发布:ubuntu下搭建lamp 编辑:程序博客网 时间:2024/04/27 15:05

最近面试,很多公司在招人的简章上几乎都有这个关于  java多线程、线程和线程、进程和进程的通信机制 理解  这个要求! 特此做了一个小总结,起码下次面试自己也能数落个123出来啊。

线程和进程很相象,它们都是程序的一个顺序执行序列,但两者又有区别。进程是一个实体,每个进程有自己独立的状态,并有自己的专用数据段。创建进程时,必须建立和复制其专用数据段。线程则互相共享数据段。同一个程序中的所有线程只有一个数据段,所以,创建线程时不必重新建立和复制数据段。由于数据段建立和复制方面的差异,使线程的建立和线程间的切换速度大大优于进程,另一方面,线程又具备进程的大多数优点。
    下面的例子可以说明线程和进程的区别。
    假设银行系统办理存款和取款手续,将帐本看成数据段。如果用进程这种机制办,那么,当储户去存/取款时,银行应先把账本复制一遍,为储户建立一个独立的账本再结算。如果按线程机制办,那么,银行里所有的出纳员都用同一个账本,储户来办存/取款时,也从这个账本直接结算。用线程机制省去了数据段复制这一步显然会使线程独具特点。
    但是,由于多个线程共享一个数据段,所以,也出现了数据访问过程的互斥和同步问题,这使系统管理功能变得相对复杂。
    总的说,一个多线程系统在提高系统的输入/输出速度、有效利用系统资源、改善计算机通信功能以及发挥多处理器硬件功能方面显示很大优势。因此,一些最新的操作系统如 Windows 95,Windows 98和Windows NT等都提供了对多线程的支持。但是,在多线程操作系统下设计多线程的程序仍然是一个比较复杂和困难的工作。由于需要解决对数据段的共享,所以,原则上应该从程序设计角度采用加锁和释放措施,稍有不慎,便会使系统产生管理上的混乱。而Java从语言一级提供对多线程的支持,这样,可由语言和运行系统联合提供对共享数据段的管理功能和同步机制,使得多线程并行程序设计相对比较容易。

 

 

 

 

 

 

 

原创粉丝点击