黑马程序员技术交流社区

标题: 学过,有点忘了QAQ 多线程 [打印本页]

作者: wjj410830911    时间: 2013-11-10 16:25
标题: 学过,有点忘了QAQ 多线程
  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是穿插着打印的


作者: 零下五度的水    时间: 2013-11-10 16:53
mr.start();  为什么被注释了,就应该用这个
mr.run() 这个一直在占用主线程,后面的代码得等它跑完了才会继续
作者: 何丛    时间: 2013-11-10 17:28
线程有两种创建方式
    1、继承自Thread类,重写run()方法,然后实例化对象,调用start()方法
    2、实现Runnable接口,重写run()方法,然后创建Thread对象,并将该类的对象传给它,调用start()方法,如:Thread t = new Thread(实现了Runnable接口的类的对象);
     你用的是第二种方法,创建了实现Runnable接口的类的对象却没有将它传给Thread,所以调用start()方法的时候调用的是Thread类的默认run()方法,所以只打印了main()方法中的bb
      
作者: hurryup    时间: 2013-11-10 18:06
要想多线程同时执行,就必须用.start()方法,它是启动一个线程的意思。
jvm底层只是默认执行带main()方法的主线程,所以你那个.run方法只是线程要执行的功能代码,而实际上线程并未执行.




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