[Go Back]

[請指教:高老師的免費on-line教學視頻]

 

1.2  Java的线程框架(Framework)

    Java提供一个Thread基类(Super Class)来支持多线程功能。这个基类协助诞生(小)线程,以及管理(小)线程的进行,让计算机系统更容易取得程序师的指示,然后安排CPU 来运作线程里的指令。例如,线程所欲达成的任务(Tasks)是程序师的事,所以程序师应填写线程里的指令,来表达其指示。为配合此部份的运作,Java提供了Runnable接口,其定义了一个run()函数;于是,程序师可撰写一个应用类别(Application Class)来实作(Implement)此界面,并且把线程的任务写在应用类别的run()函数里,如此即可让(小)线程来执行run()函数里的任务了。 [歡迎光臨 高煥堂 網頁:http://www.cnblogs.com/myEIT/ ]

    换言之,Java提供了一个Thread基类和一个Runnable接口;这两个元素就构成一个框架(Framework),如下: 

 

  图1-2  Java的线程(Thread)框架内涵 

      这是几乎每一位Java开发者都常用的多线程(Multi-thread)机制,只是许多人都会用它,却不曾认识它的真实身影:就是一个幕后的框架。由于Android应用程序开发也采用Java语言,所这个Thread框架也成为Android大框架里的一个必备元素。基于这个框架里的Thread基类和Runnable接口,你就可以撰写应用类别,来实作run()函数了,如下图: 

  

   图1-3  基于Thread而开发应用类别:Task类别 

      于此图里,框架的Thread基类会先诞生一个小线程,然后该小线程透过Runnable接口,调用(或执行)了Task类别的run()函数。例如,请看一个小小的Java程序:

 

//  Ex01-01.java 

class Tasks implements Runnable {

        public void run() {

                int sum = 0;

                for (int i = 0; i <= 100; i++)       sum += i;

                System.out.println("Result: " + sum);

        }}

publicclass JMain {

        public static void main(String[] args) {

           Thread t = new Thread(new Tasks());

                t.start();

                System.out.println("Waiting...");

        }}

 

在main()函数里,指令:

                Thread t = new Thread(new Tasks()); 

    此时,main()先诞生一个Tasks类别的对象,并且诞生一个Thread基础的对象。接着,执行到下一个指令:

                t.start();

此时,main()就调用Thread的start()函数;这start()就产生一个小线程去执行run()函数。如下图: 

 

  图1-4  Thread基类诞生小线程去执行应用程序的run()函数 

     就框架的结构而言,上图里的Runnable接口与Thread基类是可以合并起来的。也就是把run()函数写在Thread的子类别里。如下图: 

 

图1-5  类别关系图:这与图1-4的功能相同,但结构不同 

     兹撰写一个Java程序(即改写上述的Ex01-01.java)来实现上图:

 

//  Ex01-02.java

class myThread implements Thread {

        public void run() {

                int sum = 0;

                for (int i = 0; i <= 100; i++)       sum += i;

                System.out.println("Result: " + sum);

        }}

 

public class JMain {

        public static void main(String[] args) {

           Thread t = new myThread();

                t.start();

                System.out.println("Waiting...");

        }}

 

其中,执行指令:

      Thread t = new myThread();

      t.start(); 

      其诞生一个myThread对象,并且由JMain调用Thread的start()函数。这start()就产生一个小线程去执行 myThread子类别里的run()函数。上图1-5是类别关系图,其对象关系图,可表示如下:

  

  图1-6  对象关系图:基类的对象,被包含于应用子类的对象里

 

[Go Back]