黑马程序员技术交流社区

标题: 刚学多线程,请教问题,高手指导指导啊 [打印本页]

作者: 权跃杰    时间: 2012-8-1 20:01
标题: 刚学多线程,请教问题,高手指导指导啊
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()调用呢?它们是怎么联系在一起的?太抽象了!

作者: 杨智    时间: 2012-8-1 20:20
直接调用run方法就是调用方法了,弄半天还是一条线程,虚拟机会等你调用的run方法返回才会继续往下面执行,用start()方法才是开启一个新线程,至于为什么,我只能告诉你这是规定。。继承Thread 或者实现runnable接口这两个开启线程的方法,我记得似乎老毕的视频上,调用方法跟start()开启一个线程这还是重点说的呢,你可以仔细去看看。
作者: 创出一片辉煌    时间: 2012-8-1 20:27
如果要想解决这样的难题,则肯定要打开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()方法的时候就有可能产生异常。
好啦!不知道这样解释楼主能理解吗?慢慢学,加油!
作者: 马州州    时间: 2012-8-1 20:36
楼主去API文档里面找到thread类中的run方法和start方法看一下就明白了
我把图给你贴上吧
我把这个所属关系跟你说一下吧,Runnable是一个接口,在这个接口中run方法
还有各种实现它的类,我们学的线程Thread类就是它的实现类,你在用到run方法的时候是重写run方法的
而start()方法是开启此线程调用run方法
这是java工程师在设计的时候定下的

简单说一下,



作者: 权跃杰    时间: 2012-8-1 21:08
已解决了。谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2