转 java 进程与线程的区别

以下内容摘自

http://www.cnblogs.com/200911/archive/2012/07/16/2594143.html

进程与线程

理解进程与线程:

1.DOS有一个明显的特点,就是一旦病毒入侵,系统就会死机,因为传统的DOS系统是单进程处理方式,所以只有一个程序运行,其它程序无法运行。

而windows系统中,即使出现病毒,系统照样可以使用,因为windows系统是采用多进程处理方式,在同一个时间段上会有多个程序在运行。

2.对于word来说每次启动一个word实际上都是在操作系统上分配一个进程。而线程实际上是在进程的基础上进一步划分,从word来看可以把拼写检查当做一个线程进行处理。当然会同时存在多个线程。

3.如果一个进程没有了,线程一定会消失;但线程消失了,进程未必会消失。而且线程都是在进程的基础上并发同时运行。

4.下面来看进程与线程的概念:

进程是程序的动态执行过程,它经历了从代码加载,执行,到执行完毕的一个完整过程。这个过程也是进程本身从产生、发展,到最终消亡的一个过程。

多线程是实现并发机制的一个有效手段。进程和线程一样都是实现并发的基本单位。

理解多线程:如果现在同时有多个任务,则所有的系统的资源是共享的,被所有线程所公用,但是程序处理需要CPU,传统单核CPU来说同一个时间段会有多个程序执行,但是在同一个时间点上只能存在一个程序运行,也就是说所有的程序都要抢占CPU资源。但是当CPU已经发展到多核的状态了,在一个电脑上可能会存在多个CPU,这个时候就可以非常清楚的发现多线程操作间是如何进行并发的执行的。

5.java实现多线程:

两种方式:(1)继承Thread

      (2)实现Runnable接口

先调用start方法,在执行run方法。这是为什么呢?打开Thread的类定义,在jdk的src.zip中全部是java的源程序代码,直到找到java.lang.Thread类的定义:

  public synchronized void start(){

      if(threadStatus != 0)

    throw new IllegalThreadStateException();

  start0();

  if(stopBeforeStart){

    stop0(throwableFromStop);

  }

  }

 private native void start();

 start()方法可能抛出异常。

stopBeforeStart是一个boolean型变量,native关键字表示由java调用本机操作系统函数的一个关键字。在java中,运行java程序调用本机的操作系统的函数已完成特定的功能。

证明:如果现在要想实现多线程的话,则肯定需要操作系统的支持,因为多线程操作系中牵涉到一个抢占CPU的情况,要等待CPU进行调度,这一点肯定需要操作系统的底层支持,所以使用了native调用本机的系统函数。而且在各个操作系统中实现底层代码肯定是不同的,所以使用native关键字也可以让JVM自动调整不同的JVM实现。

threadStatus也表示一种状态,如果线程已经启动了在调用start方法的时候就有可能产生异常。

继承Thread实现多线程:

  class myThread extends Thread{

    private String name;

    public myThread(String name){//通过构造方法配置name属性

      this.name = name;

    }

    public void run(){//重写run方法

      for(int i = 0;i<10; i++){

        System.out.println(name +”运行,i=”+i);

      }

    }

  }

   public class ThreadDemo{

    public static void main(String []args){

      myThread mt1 = new MyThread(“线程A”);//实例化对象

      mt1.start();//调用线程主体

      mt1.start();//异常

    }

  }

 Runnable接口:在java中可以通过实现Runnable接口的方式实现多线程,Runnable接口中只定义了一个抽象的方法。public void run();

在Runnable中并没有start()方法,那么怎样才能使用start()方法呢?在Thread类中有构造方方法public Thread(Runnable target ){}利用此构造方法启动多线程。

 class MyThread implements Runnable{

  private String name;

  public MyThread(String name){

    this.name = name; 

  }

  public void run(){

    for(int i = 0;i<10;i++){

      System.out.Println(name+”运行,i = “+i);

    }

  }

 }

public class myThreadDemo{

  public static void main(String []args){

    MyThread mt1 = new MyThread(“线程A”);//实例化对象

    MyThread mt2= new MyThread(“线程B”);

    Thread t1 = new Thread(mt1);//实例化Thread类对象

    Thread t2 = new Thread(mt2);

    t1.start();//启动多线程和

    t2.start();

  }

}

 Thread类与Runnable接口的联系:

  Thread 定义:

  public class Thread extends Object implements Runnable 发现Thread类也是Runnable接口的子类,使用了代理的机制完成。

Thread类与Runnable接口的区别:

     使用Thread类操作多线程的时候无法达到资源共享的目的,而使用Runnable接口实现的多线程操作可以实现资源共享。

Thead类与Runnable接口的使用结论:

实现Runnable接口比继承Thread类有如下明显的优点:

  (1)适合多个相同程序的代码的线程去处理同一个资源。

  (2)可以避免由于单继承局限所带来的影响。

  (3)增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。  

线程的状态:

  创建状态:准备好了一个多线程对象:Thread t = new Thread();

  就绪状态:调用了start()方法,等待CPU进行调度。

  运行状态:执行run方法

  阻塞状态:暂时停止执行,可能将资源交给其他线程使用。

  终止状态:(死亡状态):线程执行完毕了,不再使用了。

Posted in 软件测试 | Leave a comment

常见linux发行版介绍

常见linux介绍

  目前我们所能接触到的linux主要有Red Hat、Slackware、Debian、SuSE、OpenLinux、TurboLinux、Red Flag、Mandarke、
BluePoint等。
  (1)Red Hat http://www.redhat.com
  以容易安装著称,初学者安装这个版本,遇到挫折的机会几乎是零,如果您对安装Win9x已驾轻就熟的话,Red Hat Linux的安装一定难不倒您。
  Red Hat另一个优点是它的RPM(Red Hat Package Manager);以往在安装软件时,最让使用者伤脑筋的是:软件在解开压缩前先要新建一个目录,然后将软件搬进去解压,解压后,有些部份可能需要搬到另一个目录中去,当要搬移的项目多时,做这些工作就是件苦差事了。而RPM「包裹管理者」就针对这一点,能将所有要安装的路径全部安排好,当使用者解开有「.rpm」扩展名的文件时,会将当初打包该文件时设定好的路径档案先检查一次,然后依照档案里的设定,将各个文件解开,送到它们应该去的地方;不只如此,它还会制作安装记录,当使用者要移除其中任一个rpm文件时,系统会根据安装记录将该文件反安装,这种做法绝对准确,不会像Windows那样会移除不该拿掉的东西。
  Red Hat Linux可以说是相当成功的一个产品,Red Hat公司有「官方版本」(official)供使用者购买,也提供了自由的FTP站供大众直接下载,官方版本与自由下载版本差异在于,官方版本多提供了一些商用软件和印刷精美的说明书。
  (2)Slackware http://www.cdrom.com
  这是个老字号的门派了,前几年玩Linux的人,几乎都用这套系统。它可完全「手工打造」个人需求的特性,让很多目前已是高手级的玩家仍念念不忘,Slackware在国内用得很多,也许用来做服务器,性能会好些。最新版本安装的过程已改善了不少,各位想要「完全掌控」情况的朋友可以一试。
  (3)Debian http://www.debian.org
  您通常会在Debian字眼后看见GNU Linux的字样,该派别目前是大家公认的结构最严谨、组织发展最整齐的,它也有一个包裹管理系统称之为「dpk」(Debian Package),所作的事情和Red Hat的「rpm」异曲同工,使整体文件的管理更加方便。Debian的原始程序代码都是遵循GNU的方式开放的,所以它完全符合开放原代码精神,不像其它的Linux都或多或少的保留了一部份程序代码不开放(Red Hat是直到6.0版才全部开放的)。最新版本有一部份程序设计师,将Debian移植到其它平台上,所以也可以在其它平台上看见其踪影。
  (4)SuSE http://www.suse.com
  这是一套在欧洲相当受欢迎的版本,它和XFree86合作开发x86上 的X Server。SuSE安装时可以选择显示德文或英文,它还有自己的一套设定程序叫做「SaX」,可以让使用者较方便的设定,它的安装套件也采用RPM模式,所以要安装、升级与移除程序都非常方便,目前版本8.0。
  (5)OpenLinux http://www.caldera.com
  这是由Caldera公司推出的版本,并不是很「Open」的一个版本,网上可以下载其Lite版本, 但正式版本是要money的,因为整个套件中有许多商用软件,所以并没有提供网络下载的服务。
  (6)TurboLinux http://www.pacific.com
  由Pacific HiTech公司发展的套件,该套件在日本市场占有一席之地,从安装到使用接口都是日文的,在国内它与清华大学及研究机构合作研发了中文版本,在国内造成了一股Linux潮流,目前已推出7.0的简体版本,8.0的日文版本。
  (7)Red Flag http://www.redflag-linux.com
  这是由中科红旗软件技术有限公司推出的中文版本的linux,该linux在众多的中国linux用户中占有一定的比例。可以从网络上下载其红旗桌面版。目前桌面版的最高版本为3.2。同时红旗针对服务器市场,专门推出了红旗服务器版本,其目前最高版本为3.0。
  (8)Mandarke Linux
  它的吉祥物是一个黑色的魔术帽,它其实参照了Redhat的基础上制成的,它继承了许多Redhat的优点,还加上了许多迎合Linux初学者的功能,如美丽的图形化安装界面。7.0版本开始走向成熟,赢得了不少用户。而且现在自从推出8.0 8.1以及8.2版后,使得Mandarke也获得了较高的用户占有率。刚从Windows中走出来的朋友,可以一试。挺不错的。
  (9)BluePoint Linux
  我觉得是这做得最成功的一款中文Linux发行版,说心里话,蓝点还是挺有创新,挺挖得深的一个Linux厂商。但是其稳定性不是太好,我觉得适于桌面,不适于做务器。不过蓝点不再出新版本了,目前的版本为BluePoint 2.0

Posted in Linux, 操作系统 | Tagged , , | Leave a comment

什么是LINUX?

太多初学者问这个问题了,总结一下发个贴。
什么是Linux

  简单的说,Linux是Unix克隆(Unix clone)或Unix风格(Unix alike)的操作系统(OS),在原代码级上兼容绝大部分Unix标准(指的是IEEE POSIX,System V,BSD),是一个支持多用户, 多进程,多线程,实时性较好的功能 强大而稳定的操作系统.它可以运行在x86 PC,Sun Sparc,Digital Alpha,680×0,PowerPC, MIPS等平台上,可 以说Linux是目前运行硬件平台最多的操作系统. Linux最大的特点在于它是GNU(Gnu’s Not Unix—-有点分形与混沌的意味—-无限自包含,简单的说GNU是一种自由软件体系)的一员,遵循公共版权许可证(GPL),秉承 “自由的思想,开放的源码”的原则,成千上万的专家/爱好者通过Internet在不断地完善并维护它,可以说Linux是计算机爱好者自己的操作系统.
  追述Linux的历史直到1990年,Linus Torvalds还是芬兰赫尔辛基大学的一名学生,最初是用汇编语言写了一个在80386保护模式下处理多任务切换的程序,后来从Minix(Andy Tanenbaum教授所写的很小的Unix操作系统,主要用于操作系统教学)得到灵感,进一步产生了自认为狂妄的想法—-写一个比Minix更好的Minix,于是开始写了一些硬件的设备驱动程序,一个小的文件系统,……,这样0.0.1版本的Linux就出来了,但是它只具有操作系统内核的勉强的雏形,甚至不能运行,你必须在有Minix的机器上编译以后才能玩.这时候Linus已经完全着迷而不想停止,决定踢开Minix,于是在1991年10月5号发布Linux 0.0.2版本,在这个版本中已经可以运行bash(the GNU Bourne Again Shell—-一种用户与操作系统内核通讯的软件)和gcc(GNU C 编译器).从一开始,Linus就决定自由扩散Linux,包括原代码,他在comp.os.minix新闻讨论组里发布Linux 0.0.2时写到:
  ”Do you pine for nice days of Minix-1.1, when mem were men and wrote their own device drivers? Are you without a nice project and just dying to cut your teeth on a OS you can try to modify for your needs? Are you finding it frustrsting when everything works on Minix? No more all-nighters to get a nifty program working? Then this post might be just for you. “As I mentioned a month ago, I’m working on a free version of a Minix-lookalike for AT-386 computers. It has finally reached the stage where it’s even usable(though may not be depending on what you want),and I am willing to put out the sources for wider distribution. It is just version 0.0.2 … but I’ve successfully run bash,gcc,gnu-make,gnu-sed,compress,etc.under it.”
   随即Linux引起黑客们(hacker)的注意,通过计算机网络加入了Linux的内核开发,Linux倾向于成为一个黑客的系统—-直到今天,在Linux社区里内核的开发被认为是真正的编程.由于一批高水平黑客的加入,使Linux发展迅猛,到1993年底94年初,Linux 1.0终于诞生了! Linux 1.0已经是一个功能完备的操作系统,而且内核写得紧凑高效,可以充分发挥硬件的性能,在4M内存的80386机器上也表现得非常好,至今人们还在津津乐道于此,不过自从2.1.xx系列的内核Linux开始走高端的路子—-硬件的发展太快了,但是Linux不会失去它的本色.Linux具有良好的兼容性和可移植性,大约在1.3版本之后,开始向其他硬件平台上移植,包括号称最快的CPU—Digital Alpha(至少目前主频是最高的).所以不要总把Linux与低档硬件平台联系到一块,Linux发展到今天,这是一个误区,它只是将硬件的性能充分发挥出来而已,Linux必将从低端应用横扫到高端应用!
   在Linux的发展历程上还有一件重要的事:Linux加入GNU并遵循公共版权许可证(GPL).此举大大加强了GNU和Linux,几乎所有应用的GNU库/软件都移植到Linux,完善并提高了Linux的实用性,而GNU有了一个根基,我现在也搞不清楚到底是GNU Linux呢还是基于Linux的GNU. :-) 更重要的是遵循公共版权许可证,在继承自由软件的精神的前提下,不再排斥对自由软件的商业行为(如把自由软件打包以光盘形式出售),不排斥商家对自由软件进一步开发,不排斥在Linux上开发商业软件.从此Linux又开始了一次飞跃,出现了很多的Linux发行版,如Slackware,Redhat,Suse,TurboLinux,OpenLinux等十多种,而且还在增加,注意你不能说”Redhat Linux”"Suse Linux”"Slackware Linux”等等,Linux主要指操作系统内核,对所有发行版内核原代码都是一样的(但集成的内核版本可能因发行时间不同而有所不同).还有一些公司在Linux上开发商业软件或把其他Unix平台的软件移植到Linux上来,如今很多IT业界的大腕如IBM,Intel,Oracle,Infomix,Sysbase,Corel,Netscape,CA,Novell等都宣布支持Linux! 商家的加盟弥补了纯自由软件的不足和发展障碍,Linux迅速普及到广大计算机爱好者,并且进入商业应用,正是打破某些公司垄断文化圈的希望所在!!
   Linux是爱好者们通过Internet协同开发出来的,当然它的网络功能十分强大,比如你可以通过ftp,nfs等来安装Linux,用它来做网关等等.随着Linux的发展衍生出来的应用恐怕出乎Linus本人最初的预料,如有人用它来做路由器,有人来做嵌入式系统,有人来做实时性系统……常有新手问Linux能做什么,其实它不象那些中看不中用的操作系统,不在于你用它能干什么,而在于你想干什么!
   Linux的兴起还给人们很多启迪与思考,如集市式软件开发的讨论,又如自由软件的精神……

Posted in Linux, 操作系统 | Tagged , | Leave a comment