A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class MyThread extends Thread{       
        private String name ;               
        public MyThread(String name){
                this.name = name ;               
        }
        public void run(){       
                for(int i=0;i<10;i++){
                        System.out.println(name + "运行,i = " + i) ;
                }
        }
};
public class ThreadDemo01{
        public static void main(String args[]){
                MyThread mt1 = new MyThread("线程A ") ;         
                MyThread mt2 = new MyThread("线程B ") ;       
                mt1.start() ;
                mt2.start() ;
        }
};
初学线程!为什么不直接调用run()方法,而直接通过start()调用呢?它们是怎么联系在一起的?太抽象了!

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

4 个回复

倒序浏览
直接调用run方法就是调用方法了,弄半天还是一条线程,虚拟机会等你调用的run方法返回才会继续往下面执行,用start()方法才是开启一个新线程,至于为什么,我只能告诉你这是规定。。继承Thread 或者实现runnable接口这两个开启线程的方法,我记得似乎老毕的视频上,调用方法跟start()开启一个线程这还是重点说的呢,你可以仔细去看看。
回复 使用道具 举报
如果要想解决这样的难题,则肯定要打开Thread类的定义,在jdk的src.zip中全部都是JAVA的资源程序代码,直接找到java
.lang.Thread类,就可以打开Thread类的定义.一下是我复制的主要代码,没用的就没要,包括注释(全英文)!
    public synchronized void start() {
  
        if (threadStatus != 0 || this != me)
            throw new IllegalThreadStateException();
        group.add(this);
        start0();
        if (stopBeforeStart) {
            stop0(throwableFromStop);
        }
    }
    private native void start();
stopBeforeStart是一个boolean类型的变量
native关键字表示的是一个由java调用本机操作系统函数的一个关键字。在java中,运行java程序调用本机的操作系统的
函数以完成特定的功能。
     证明,如果现在要是想实现多线程的话,则肯定需要操作系统的支持,因为多线程操作中牵扯到一个抢CPU得情况,
要等待CPU进行调度,那么这一点肯定需要操作系统的底层支持,所以使用了native调用本机的系统函数。而且在各个操作系统
中多线程的实现底层代码肯定是不同的,所以使用native关键字也可以让JVM自动去调整不同的JVM实现。
     threadStatus也表示一种状态,如果线程已经启动了在调用start()方法的时候就有可能产生异常。
好啦!不知道这样解释楼主能理解吗?慢慢学,加油!

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 API才是王道!

查看全部评分

回复 使用道具 举报
楼主去API文档里面找到thread类中的run方法和start方法看一下就明白了
我把图给你贴上吧
我把这个所属关系跟你说一下吧,Runnable是一个接口,在这个接口中run方法
还有各种实现它的类,我们学的线程Thread类就是它的实现类,你在用到run方法的时候是重写run方法的
而start()方法是开启此线程调用run方法
这是java工程师在设计的时候定下的

简单说一下,


评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 赞一个!

查看全部评分

回复 使用道具 举报
已解决了。谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马