`
taimukang
  • 浏览: 180879 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java thread: run方法和john方法

 
阅读更多

 

 

1、要实现多线程,可以继承Thread类或实现Runnable接口,并且重写run方法,通过调用start方法启动线程,并自动调用run方法。
2、事实上run方法可以被重载,但线程执行时,默认只会调用无参数、无返回值的run方法。而重载的run方法只能显示调用。与其它的方法调用一样,是在调用它的线程中执行的


3、join方法:Waits for this thread to die. 即所等待的线程结束之后才会继续向下执行。

 

下面举例说明:

public class Starter extends Thread{
    private int x = 2;
    public Starter(){
        x = 5;
        start();
    }

    public void run(){
        System.out.println(Thread.currentThread().getName());
        x*=2;
        System.out.println("x = "+x +" after run() method invoked!");
    }
    public void run(int y) throws Exception{
        join();
        System.out.println(Thread.currentThread().getName());
        x-= y;
        System.out.println(x);
    }
    public static void main(String[] args) throws Exception{
        new Starter().run(1);
    }
}

 

output:

Thread-0
x = 10 after run() method invoked!
main
9

 如果不调用join方法

 public void run(int y) throws Exception{
        System.out.println(Thread.currentThread().getName());
        x-= y;
        System.out.println(x);
    }

 

output:

main
4
Thread-0
x = 8 after run() method invoked!

 

这说明如果不调用join方法,主线程不会等待,而是直接执行,而jvm要创建线程需要一定时间,因此一般来说会比较慢。

 

 

    另外需要强调的是,要启动线程,必须调用start方法,通过start方法调用run方法。如果直接调用run方法,并不会启动线程,而是相等于普通都方法调用,都是在主线程中执行。example:

public class Starter extends Thread{
    private int x = 2;
    public void run(){
        System.out.println(Thread.currentThread().getName());
        x*=2;
        System.out.println("x = "+x +" after run() method invoked!");
    }
    public static void main(String[] args) throws Exception{
        new Starter().run();
    }
}

 

output:

main
x = 4 after run() method invoked!

 

 

 

分享到:
评论
1 楼 youshenxuzuo 2014-11-02  
您好, 我有个问题想请教一下。
关于start方法启动线程,自动调用的run方法若需要传递参数,应该怎么办?

相关推荐

Global site tag (gtag.js) - Google Analytics