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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈世涛 中级黑马   /  2012-7-20 12:57  /  2355 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo extends Thread
{
private String name;
Demo(String name)
{
  super();
  this.name = name;
}
public void run()
{
  for(int x=1; x<=10; x++)
  {
  // System.out.println(name+"---"+x+"......"+Thread.currentThread().getName());
   System.out.println(name+"---"+x+"......"+getName());
   
  }
}

}
class ThreadDemo
{
public static void main(String[] args)
{
  
  Demo d1 = new Demo("张三");
  Demo d2 = new Demo("李四");
  d1.run();
  d2.run();

}
}
针对一:
public void run()
{
  for(int x=1; x<=10; x++)
  {
  // System.out.println(name+"---"+x+":::::"+Thread.currentThread().getName());
   System.out.println(name+"---"+x+":++++++:"+getName());
   
  }
}
出现如下结果:

针对二:
public void run()
{
  for(int x=1; x<=10; x++)
  {
  System.out.println(name+"---"+x+":::::"+Thread.currentThread().getName());
  // System.out.println(name+"---"+x+":++++++:"+getName());
   
  }
}

出现如下结果:



求详解,求真相。。

2.PNG (182.94 KB, 下载次数: 38)

2.PNG

1.PNG (164.53 KB, 下载次数: 23)

1.PNG

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
class Demo extends Thread
{
private String name;
Demo(String name)
{
  super();
  this.name = name;
}
public void run()
{
  for(int x=1; x<=10; x++)
  {
  // System.out.println(name+"---"+x+"......"+Thread.currentThread().getName());
   System.out.println(name+"---"+x+"......"+getName());
   
  }
}
}
class ThreadDemo
{
public static void main(String[] args)
{
  
  Demo d1 = new Demo("张三");
  Demo d2 = new Demo("李四");
  d1.start();//是通过start()方法启动线程的.你在看看视频.希望你能明白
d2.start();
//d1.run();这里只是通过创建对象的方式,调用方法并没有开启线程.你这里还是单线程.
//d2.run();

}
}


评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
周玉龙 发表于 2012-7-20 13:18
class Demo extends Thread
{
private String name;

嗯,谢谢呀。。。:P
回复 使用道具 举报
不客气的..明白了就可以了...
回复 使用道具 举报
class Demo extends Thread
{
private String name;
Demo(String name)
{
  super();
  this.name = name;
}
public void run()
{
  for(int x=1; x<=10; x++)
  {
  // System.out.println(name+"---"+x+"......"+Thread.currentThread().getName());
   System.out.println(name+"---"+x+"......"+getName());
   
  }
}

}
class ThreadDemo
{
public static void main(String[] args)
{
  
  Demo d1 = new Demo("张三");//此处创建了一个对象即是一个新线程,但注意:在下面的代码中,你并没有d1.start(),意思就是你并没有在创建的时候,启动它呀。所以此时主线程就会一路向下执行这一行代码d1.run(),所以不会出现张三李四的交替输出
  Demo d2 = new Demo("李四");//此处又创建了一个新对象即是另一个新线程,执行过程同上个对象。
  d1.run();
  d2.run();

}
}

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Demo d1 = new Demo("张三");
  Demo d2 = new Demo("李四");
  d1.run();   
  d2.run();
//d1.run()和d2.run()这是由主线程依次运行的,是单线程。你创建了线程( Demo d1= new Demo("张三"); Demo d2 = new Demo("李四");)但是并没有启动。应该是d1.start();d2.start();
回复 使用道具 举报

  d1.run();  d2.run();//这两句都没有启动自定义的线程,只是调用了线程中的run方法,启动线程是通过start方法的
当你调用这第一个方法的时候,出现第一种情况,因为使用getName方法获得的是线程的名称;
当你调用这第二个方法的时候,出现第二种情况,因为currentThread方法获得的是当前正在执行的线程对象的引用,此引用就是main方法,所以该引用的名称也就是main

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