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


各位看官们,大家好,上一回中咱们说的是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 :1
Thread-1 Data :1
Thread-0 Data :2
Thread-1 Data :2
Thread-0 Data :3
Thread-1 Data :3
Thread-0 Data :4
Thread-1 Data :4
Thread-0 Data :5
Thread-1 Data :5

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值