java多线程,JAVA 的多线程浅析[一][转]

二 JAVA的多线程理论
2.1引入
Java提供的多线程功能使得在一个程序里可同时执行多个小任务。线程有时也称小进程是一个大进程里分出来的小的独立的进程。因为Java实现的多线程技术,所以比C和C++更键壮。多线程带来的更大的好处是更好的交互性能和实时控制性能。当然实时控制性能还取决于系统本身(UNIX,Windows,Macintosh等),在开发难易程度和性能上都比单线程要好。传统编程环境通常是单线程的,由于JAVA是多线程的。尽管多线程是强大而灵巧的编程工具,但要用好却不容易,且有许多陷阱,即使编程老手也难免误用。为了更好的了解线程,用办公室工作人员作比喻。办公室工作人员就象CPU,根据上级指示做工作,就象执行一个线程。在单线程环境中,每个程序编写和执行的方式是任何时候程序只考虑一个处理顺序。用我们的比喻,就象办公室工作人员从头到尾不受打扰和分心,只安排做一个工作。当然,实际生活中工作人员很难一次只有一个任务,更常见的是工作人员要同时做几件事。老板将工作交给工作人员,希望工作人员做一这个工作,再做点那个工作,等等。如果一个任务无法做下去了,比如工作人员等待另一部门的信息,则工作人员将这个工作放在一边,转入另一个工作。一般来说,老板希望工作人员手头的各个任务每一天都有一些进展。这样就引入了多线程的概念。多线程编程环境与这个典型的办公室非常相似,同时给CPU分配了几个任务或线程。和办公室人员一样,计算机CPU实际上不可能同一时间做几件事,而是把时间分配到不同的线程,使每个线程都有点进展。如果一个线程无法进行,比如线程要求的键盘输入尚未取得,则转入另一线程的工作。通常,CPU在线程间的切换非常迅速,使人们感觉到好象所有线程是同时进行的。
任何处理环境,无论是单线程还是多线程,都有三个关键方面。第一个是CPU,它实际上进行计算机活动;第二个是执行的程序的代码;第三个是程序操作的数据。
多线程编程中,每个线程都用编码提供线程的行为,用数据供给编码操作。多个线程可以同时处理同一编码和数据,不同的线程也可能各有不同的编码和数据。事实上编码和数据部分是相当独立的,需要时即可向线程提供。因此经常是几个线程使用同一编码和不同的数据。这个思想也可以用办公室工作人员来比喻。会计可能要做一个部门的帐或几个或几个部门的帐。任何情况的做帐的任务是相同的程序代码,但每个部门的数据是不同的。会计可能要做整个公司的帐,这时有几个任务,但有些数据是共享的,因为公司帐需要来自各个部门的数据。
多线程编程环境用方便的模型隐藏CPU在任务切换间的事实。模型允许假装成有多个可用的CPU。为了建立另一个任务,编程人员要求另一个虚拟CPU,指示它开始用某个数据组执行某个程序段。下面我们来建立线程。
建立线程
在JAVA中建立线程并不困难,所需要的三件事:执行的代码、代码所操作的数据和执行代码的虚拟CPU。虚拟CPU包装在Thread类的实例中。建立Thread对象时,必须提供执行的代码和代码所处理的数据。JAVA的面向对象模型要求程序代码只能写成类的成员方法。数据只能作为方法中的自动(或本地)变量或类的成员存在。这些规则要求为线程提供的代码和数据应以类的实例的形式出现。
Public class SimpleRunnable implemants Runable{
Private String message;
Public static void main(String args[]){
SimpleRunnable r1=new SimpleRunnable(“Hello”);
Thread t1=new Thread(r1);
t1.start();
}
public SimpleRunnable(String message){
this.message=message;
}
public void run(){
for(;;){
System.out.println(message);
}
}
}
线程开始执行时,它在public void run()方法中执行。这种方法是定义的线程执行的起点,就象应用程序从main()开始、小程序从inIT()开始一样。线程操作的本地数据是传入线程的对象的成员。
首先,main()方法构造SimpleRunnable类的实例。注意,实例有自己的数据,这里是一个String,初始化为”Hello”.由于实例r1传入Thread类构造器,这是线程运行时处理的数据。执行的代码是实例方法run()。
Tags:  java多线程

延伸阅读

最新评论

发表评论