Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2559661
  • 博文数量: 245
  • 博客积分: 4125
  • 博客等级: 上校
  • 技术积分: 3113
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-25 23:56
文章分类

全部博文(245)

文章存档

2015年(2)

2014年(26)

2013年(41)

2012年(40)

2011年(134)

2010年(2)

分类: Java

2011-12-05 16:40:17

一个进程中可以包含一个或多个线程,一个线程就是一个程序内部的一条执行线索。

在单线程中,程序代码按调用顺序依次往下执行,在这种情况下,当主函数调用了子函数,主函数必须等待子函数返回后才能继续往下执行,不能实现两段程序代码同时交替运行的效果。如果要一程序中实现多段代码同时交替运行,就需产生多个线程,并指定每个线程上所要运行的程序代码段,这就是多线程。

当程序启动运行是就自动产生了一个线程,主函数main就是在这个线程上运行的。当不再产生新的线程时,程序就是单线程的。

创建多线程有两种方法:继承Thread类和实现Runnable接口。
一个java.lang.Thread类的对象代表一个线程。
通过Thread类和它定义的对象,就可以获得当前线程对象,获取某一线程的名称。

实现多线程,可通过编写一个继承了Thread类的子类,子类要覆盖Thread类中的run函数,在子类run函数中调用想在新线程上运行的程序代码。

启动一个新的线程,不是直接调用Thread子类对象的run方法,而是调用Thread子类对象的start方法。

Thread类对象的start方法将产生一个新的线程,并在该线程上运行该Thread类对象中的run方法,根据面向对象的多态性,在该线程上实际运行的是Thread子类对象的run方法。

由于线程代码段在run方法中,那么该方法执行完后,线程也就相应的结束了。因而可以通过控制run方法中的循环条件来控制线程的终止。

  1. public class ThreadDemo {

  2.     public static void main(String args[]){
  3.         
  4.         new TestThread().start();
  5.         TestThread2 thread2 = new TestThread2();
  6.         TestThread thread3 = new TestThread();
  7.         
  8.         thread2.start();
  9.         thread3.start();
  10.         /*while(true){
  11.             System.out.println("main thread is runing...");
  12.         }
  13.         */
  14.     }
  15. }

  16. class TestThread extends Thread {

  17.     public void run(){
  18.         while(true){
  19.             System.out.println(Thread.currentThread().getName() + " is runing!!!");
  20.             try {
  21.                 Thread.sleep(1000);
  22.             } catch (InterruptedException e) {
  23.                 // TODO Auto-generated catch block
  24.                 e.printStackTrace();
  25.             }
  26.         }
  27.     }
  28. }


  29. class TestThread2 extends Thread {

  30.     public void run(){
  31.         while(true){
  32.             System.out.println(Thread.currentThread().getName() + " is runing***");
  33.             try {
  34.                 Thread.sleep(1000);
  35.             } catch (InterruptedException e) {
  36.                 // TODO Auto-generated catch block
  37.                 e.printStackTrace();
  38.             }
  39.         }
  40.     }
  41. }



copy from book





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