一起Talk Android吧(第二十三回:Java多线程编程一)

来源:互联网 发布:访问数据库的方式 编辑:程序博客网 时间:2024/05/16 17:49

各位看官们,大家好,上一回中咱们说的是Java常用类之文件操作的例子,这一回咱们说的例子是Java多线程编程。闲话休提, 言归正转。让我们一起Talk Android吧!


看官们,关于进程和线程的概念,我在C栗子中介绍过,如果哪位看官不清楚的话,可以查看C栗子中的内容。(进程概念点这里,线程概念点这里)在这里,我假定大家都明白进程和线程的概念,因此我们就来看看在Java中是如何实现多线程编程的。Java提供了Thread类和Runnable接口来实现多线程编程。我们只需要重写其中的run方法,然后通过Thread类的start方法来启动线程就可以。下面是程序的伪代码,请大家参考:

class A extends Thread { //or  implements Runnable{    public void run() {    //do some thing    }}new A().start(); // 启动线程

在上面的伪代码中,我们可以继承Thread类或者实现Runnable接口,这两者都可以达到多线程的效果。依据经验来看,使用Runnable接口的时候比较多,因为它可以弥补继承时只能进行单继承的不足。使用这种方式实现多线程时,还需要把接口和Thread类结合在一起,这样才能使用Thread类中的start()方法。那么如何才能把它们结合在一起呢?其实很简单,使用Thread类的构造函数就可以。

不管是接口还是类,它们都有一个共同点:run()方法,也算是殊途同归吧。run()方法是线程执行的主体,我们可以把相关的工作写到run()方法中,线程启动后会自动调用该方法。千万不要主动去调用它,不然不会启动线程。

这时看官提问了:刚才介绍的内容好像只有一个线程,如何才能启动多个线程呢?只需要new A().start();就可以(这是伪代码中用来启动线程的代码),想启动几个线程就使用几次该代码。

看官们,光说不练不是我们的风格,接下来我们通过具体的代码演示Java多线程编程。

public class ThreadEx extends Thread {    public static class TestThread implements Runnable{        private int data ;        public void setData(int data) {            this.data = data;        }        public int getData() {            return data;        }        @Override        public void run() {            // TODO Auto-generated method stub            for(int i=0; i<5; ++i){                setData(i+1);                               System.out.println(Thread.currentThread().getName()+ " Data :"+ getData());            }        }    }    public static void main(String[] args) {        TestThread threadItem = new TestThread();        Thread t1 = new Thread(threadItem);  //connect the the class and interface by constructor        Thread t2 = new Thread(threadItem);  // create the second thread        t1.start();  // start the first thread        t2.start();  // start the second thread    }   }

看官们,上面的代码可以看作是对刚才伪代码的转换,相信大家结合代码中的注释就能明白代码的含义。代码中只有一处没有介绍过,它是Thread.currentThread().getName(),通过该方法可以获取到当前线程的名字。

下面是程序的运行结果,请大家参考

Thread-0 Data :1Thread-1 Data :1Thread-0 Data :2Thread-1 Data :2Thread-0 Data :3Thread-1 Data :3Thread-0 Data :4Thread-1 Data :4Thread-0 Data :5Thread-1 Data :5

看官们,该结果是一个比较理想的结果,从结果中可以看到,程序中的两个线程(Thread-0和Thread-1)交替运行,而且两个线程都输出了相同的结果。请大家注意,这只是个参考,在不同的电脑上会有不同的结果,即使是在同一台电脑上不同时间也会有不同的结果。因此,如果哪位看官运行上面的代码后得到了和这里不同的结果,这是正常的。因为这是Java虚拟机在后台自动进行线程的调度,我们没有去干涉线程调度。

各位看官,关于Java多线程编程的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!


阅读全文
1 0
原创粉丝点击