黑马程序员技术交流社区

标题: Java基础-多线程 [打印本页]

作者: 18895700133    时间: 2016-5-6 22:40
标题: Java基础-多线程
我们使用Thread.currentThread()静态函数获得该代码当前执行时对应的那个线程对象。得到这个线程对象 后双调用 了线程对象 的getname()方法取出当前线程的名称字符串

运行后我们会发现第一个代码块没有运行而且是只运行了第二个代码并且是无限循环。也就导致了代码块一处永远没有机会执行

这样因为有了继承这里ThreadDemo类的全部特点也就让TestThread类有了然而程序没有直接 调用 TestThread类的对象

run方法也是调用了该 类对象 从Thread类继承来的start方法也就让两个while循环达到了交替运行的效果。
在代码段run()中,也可以通过 线程的静态方法 Thread.currentThread()得到当前线程实例对象。得到当前线程对象后又调用了getName方法取出当前线程的名称字符串

1.要将一段代码在一个新的线程上运行,该代码中必须在一个类的run函数中,并且run函数所在的类是Thread类中的子类。也就是要实现 多线程,必须要有一个继承了Thread类的子类,子类要覆盖Thread类中的run函数,在子类的run函数中调用 想在新线程上运行的程序代码

2.启动一个新的线程不是直接调用 Thread子类对象的run方法,也是调用Thread子类对象 的start(继承的那个方法)方法Thread类对象start方法将产生一个新的线程,并在该线程上运行该Thread类对象 中的run方法,根据面向对象 的多态性,在该 线程上实际运行的是thread子类对象中的run方法

3.由于线程在run方法中,那么该方法执行完后线程也就结束了,因些可以通过控制run方法中的循环条件来控制线程的终止

如果Thread类的子类没有覆盖run方法,编译运行时有明显的错误或异常么?运行结果又是什么呢?

程序调用 Thread类中的run方法而该方法什么都 不做,所以新的线程刚创建那么就结束了这样的线程对我们来说没有任何意义的

而且 直接 在程序 中写new Thread().start();这样的语句编译和运行时有明显的错误和异常么?运行结果又是什么?

这个与上面是一样因为线程对象不是通过 Thread子类创建的而是通过 Thread类直接创建的,新的线程将直接 调用 Thread中的run()方法。




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