java 线程 start 方法 跟 run 方法的区别

来源:互联网 发布:新网中文域名 编辑:程序博客网 时间:2024/05/18 02:43

今天忽然想到 线程的 问题 然后就写了个测试例子 !

参考:http://zhidao.baidu.com/link?url=dYpdWOn6FBZNjUkIFbWESIlw7bgHaQyD4ltQGSi9RlPUsZiOIWFw0799J56cthEgGo1Hfg6IdbUgXq38Nh9-DK

通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程,而如果直接用Run方法,这只是调用一个方法而已,程序中依然只有主线程--这一个线程,其程序执行路径还是只有一条,这样就没有达到写线程的目的。记住:线程就是为了更好地利用CPU,提高程序运行速率的!

上面是 百度知道里面的原话!


下面是我写的例子:


/** * Created by hy.ao on 14-5-13. */public class ThreadTest extends Thread {    @Override    public void run() {        for (int i = 0; i < 1000000; ) {            i++;        }        System.out.println("thread is ok");    }    @Override    public synchronized void start() {        super.start();    }}

import junit.framework.TestCase;/** * Created by hy.ao on 14-5-13. */public class Test extends TestCase {    public static void main(String[] args) {        test1();        test2();    }    public static void test1() {        ThreadTest threadTest = new ThreadTest();        threadTest.start();        System.out.println(111212);    }    public static void test2() {        ThreadTest threadTest = new ThreadTest();        threadTest.run();        System.out.println(111212);    }}

运行   test1() 的结果 ,  start 是2个线程 所以 应该先打印 11212 

111212thread is ok

运行test2() 这个是同一个主线程里面 所以应该  是 后打印 11212

thread is ok111212

所以很明显可以看出结论了!


start() 是启动了2个线程!而调run 方法 只是调方法 还是主线程!

0 0
原创粉丝点击