http://baike.baidu.com/view/533192.htm
//
http://baike.baidu.com/view/533192.htm
//
以下内容摘自
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方法
阻塞状态:暂时停止执行,可能将资源交给其他线程使用。
终止状态:(死亡状态):线程执行完毕了,不再使用了。
常见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