Java中start和run办法的差别

    添加时间:2013-7-22 点击量:

    一.题目引入


            说到这两个办法就不得不说多线程,说到多线程就不得不提实现多线程的两种体式格式持续Thread类和实现Runable接口,下面先看这两种体式格式的差别。


    二. Java中实现多线程的两种体式格式



    1. 持续Thread类



    /
    
    应用Thread类模仿4个售票窗口共同卖100张的法度,实际上是各卖100张
    /
    public class ThreadTest {

    public static void main(String[] args){
    new MyThread().start();
    new MyThread().start();
    new MyThread().start();
    new MyThread().start();
    }

    //也可以把类写在外边
    public static class MyThread extends Thread{
    private int tickets=100;
    public void run() {
    while(tickets>0){
    System.out.println(
    this.getName()+卖出第【+tickets--+】张);
    }
    }
    }
    }



    /
    
    应用Thread类模仿4个售票窗口共同卖100张的法度,实际上是各卖100张
    /
    public class ThreadTest {

    public static void main(String[] args){
    new MyThread().start();
    new MyThread().start();
    new MyThread().start();
    new MyThread().start();
    }
    }
    class MyThread extends Thread{
    private int tickets=100;
    public void run() {
    while(tickets>0){
    System.out.println(
    this.getName()+卖出第【+tickets--+】张);
    }
    }
    }




          2.  实现Runable接口



    /
    
    应用Runnable接口模仿4个售票窗口共同卖100张的法度
    /
    public class RunnableTest {

    public static void main(String[] args) {
    Runnable runnable
    =new MyThread();
    new Thread(runnable).start();
    new Thread(runnable).start();
    new Thread(runnable).start();
    new Thread(runnable).start();
    }

    public static class MyThread implements Runnable{
    private int tickets=100;
    public void run() {
    while(tickets>0){
    System.out.println(Thread.currentThread().getName()
    +卖出第【+tickets--+】张);
    }
    }
    }
    }




    不管采取哪种体式格式,覆盖run办法时既可以用内部类也可以用外部类,不过一般采取内部类。


          3.  两种体式格式的斗劲


    实际中往往采取实现Runable接口,一方面因为java只支撑单持续,持续了Thread类就无法再持续持续其它类,并且Runable接口只有一个run办法;另一方面经由过程成果可以看出实现Runable接辩才是真正的多线程……


    三.两种办法的差别


           1) start:


    用start办法来启动线程,真正实现了多线程运行,这时无需守候run办法体代码履行完毕而直接持续履行下面的代码。经由过程调用Thread类的start()办法来启动一个线程,这时此线程处于伏贴(可运行)状况,并没有运行,一旦获得cpu时候片,就开端履行run()办法,这里办法 run()称为线程体,它包含了要履行的这个线程的内容,Run办法运行停止,此线程随即终止。


           2) run:


    run()办法只是类的一个通俗办法罢了,若是直接调用Run办法,法度中依然只有主线程这一个线程,其法度履行路径还是只有一条,还是要次序履行,还是要守候run办法体履行完毕后才可持续履行下面的代码,如许就没有达到写线程的目标。总结:调用start办法方可启动线程,而run办法只是thread的一个通俗办法调用,还是在主线程里履行。这两个办法应当都斗劲熟悉,把须要并行处理惩罚的代码放在run()办法中,start()办法启动线程将主动调用 run()办法,这是由jvm的内存机制规定的。并且run()办法必须是public接见权限,返回值类型为void.。


    我俩之间有着强烈的吸引力。短短几个小时后,我俩已经明白:我们的心是一个整体的两半,我俩的心灵是孪生兄妹,是知己。她让我感到更有活力,更完美,更幸福。即使她不在我身边,我依然还是感到幸福,因为她总是以这样或者那样的方式出现在我心头。——恩里克·巴里奥斯《爱的文明》
    分享到: