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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package cn.itheima.test;

  2. class MyThread extends Thread {

  3.     public void run() {

  4.         try {

  5.             Thread.sleep(3000);

  6.             } catch (InterruptedException e) {

  7.          }

  8.         System.out.println("B");

  9.         }

  10. }

  11. public class Test3 {
  12.           public static void main(String[] args) {
  13.                   MyThread t = new MyThread();

  14.                t.run();

  15.                t.start();

  16.                System.out.println("A");
  17.         }
  18. }
复制代码

输出结果:B A B是怎么来的呢?

评分

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

查看全部评分

6 个回复

正序浏览
加油加油!!!!11
回复 使用道具 举报
长见识了~~
回复 使用道具 举报
建议你把run和start分别单一执行以下就可以看到效果了
回复 使用道具 举报
首先,t.run()并不是启动线程,只是调用方法润(),所以输出B,之后切记主函数其实也是一个线程,当启动JVM时也就启动了主函数线程,又因为使用了Thread.sleep(3000);是的run()休眠了,主函数抢到了cpu资源运行输出A,之后休眠结束 输出B。
回复 使用道具 举报
楼上说的对!
回复 使用道具 举报
t.run();    // 这里并没有开启一个线程,依然是主线程运行,输出B
t.start();  // 这里开启了一个线程,此时有主线程和子线程两个线程的任务在运行
// 但是由于子线程中它必须先等待3秒才可以输出B,而主线程的任务直接就可以输出A
// 相对于子线程来说,主线程较快的走到了输出A的这句代码
// 所以第二个输出 A
// 最后把子线程中的 B 输出流
// 最后得到的是 B A B

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马