Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2321069
  • 博文数量: 252
  • 博客积分: 5472
  • 博客等级: 大校
  • 技术积分: 3107
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-17 18:39
文章分类

全部博文(252)

文章存档

2012年(96)

2011年(156)

分类: Java

2011-11-21 15:12:21

 

  1. public class ThreadDemo extends Thread{
  2. public void run() {
  3. for(int i = 0; i <= 5; i++) {
  4. try {
  5. System.out.println(currentThread().getName() + "---" + i);
  6. sleep(100);
  7. } catch (InterruptedException e) {
  8. e.printStackTrace();
  9. }
  10. }
  11. }
  12. public static void main(String [] args) {
  13. ThreadDemo t = new ThreadDemo();
  14. t.start();
  15. t.run();
  16. }
  17. }

 

输出结果

  1. main---0
  2. Thread-0---0
  3. Thread-0---1
  4. main---1
  5. main---2
  6. Thread-0---2
  7. Thread-0---3
  8. main---3
  9. Thread-0---4
  10. main---4
  11. main---5
  12. Thread-0---5

 

 

1,当你运行这个类的时候,首先是java虚拟机自动创建一个线程,假设为T1, 这个线程会调用main方法,main方法是java虚拟机自动调用的,调用的这个线程, 即通常我们 说的主线程 2,ThreadDemo 是你自定义的一个线程, 当T1线程调用t.start();的时候,此时就启动了线程ThreadDemo,T1线程只是告诉线程ThreadDemo,啊,我通知一下,你可以运行了。我还有工作没做完,我先走了,ThreadDemo这个线程运行后, 会自动调用run方法,所以run方法是在threadDemo线程中运行的, System.out.println(currentThread().getName() + "---" + i);打印的是ThreadDemo 线程 3,T1线程通知threadDemo可以运行以后,他就不管ThreadDemo了,调用t.start()后, 会立即执行下面的代码t.run,因为t.run的调用与普通方法没有任何区别, t.run与t.start不一 样,因为java规范规定start启动一个线程,但没规定run方法启动一个线程 那么既然run方法没有启动新的线程,那么t.run();方法还是在T1线程中运行的 所以t.run();是打印的是main线程

 

阅读(2550) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~