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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wjj410830911 中级黑马   /  2013-11-10 16:25  /  1038 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class 测试3 {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 MyRunnable mr = new MyRunnable();
  7.                 //mr.start();
  8.                 mr.run();
  9.                 Thread t = new Thread();               
  10.                 t.start();        
  11.                 for(int x = 0; x < 100000; x++) {
  12.                         System.out.println("bb");
  13.                 }
  14.         }

  15. }

  16. class MyRunnable implements Runnable {               
  17.         @Override
  18.         public void run() {                                                
  19.                 for(int x = 0; x < 101000; x++) {               
  20.                         System.out.println("aaaaaaaaaaaaaaaa");
  21.                 }
  22.         }        
  23. }
复制代码
我这个貌似没有一起执行啊?我记得aaa和bb是穿插着打印的

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

5 个回复

正序浏览
要想多线程同时执行,就必须用.start()方法,它是启动一个线程的意思。
jvm底层只是默认执行带main()方法的主线程,所以你那个.run方法只是线程要执行的功能代码,而实际上线程并未执行.
回复 使用道具 举报
线程有两种创建方式
    1、继承自Thread类,重写run()方法,然后实例化对象,调用start()方法
    2、实现Runnable接口,重写run()方法,然后创建Thread对象,并将该类的对象传给它,调用start()方法,如:Thread t = new Thread(实现了Runnable接口的类的对象);
     你用的是第二种方法,创建了实现Runnable接口的类的对象却没有将它传给Thread,所以调用start()方法的时候调用的是Thread类的默认run()方法,所以只打印了main()方法中的bb
      

点评

我试了半天 终于找到方法了 不用打mr.start();和mr.run(); 直接Thread t = new Thread(mr); t.start();就可以了  发表于 2013-11-10 19:06
回复 使用道具 举报
mr.start();  为什么被注释了,就应该用这个
mr.run() 这个一直在占用主线程,后面的代码得等它跑完了才会继续

点评

因为 我打mr.start(); 报错了  发表于 2013-11-10 19:03
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马