Java Thread的概述与总结

发表于:2012-2-02 09:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:DreamSea    来源:51Testing软件测试网采编

  线程的概述(Introduction)

  线程是一个程序的多个执行路径,执行调度的单位,依托于进程存在。 线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈,是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据,如线程执行函数中所定义的变量。

  注意:Java中的多线程是一种抢占机制而不是分时机制。抢占机制指的是有多个线程处于可运行状态,但是只允许一个线程在运行,他们通过竞争的方式抢占CPU。

  线程的定义(Defining)

  定义一个线程(Defining a Thread)有两种方法

  1)继承java.lang.Thread类

  1. /** 
  2.  * 使用继承java.lang.Thread类的方式创建一个线程 
  3.  *  
  4.  * @author DreamSea 2011-12-29 20:17:06 
  5.  */ 
  6. public class ThreadTest extends Thread {  
  7.     /** 
  8.      * 重写(Override)run()方法 JVM会自动调用该方法 
  9.      */ 
  10.     public void run() {  
  11.         System.out.println("I'm running!");  
  12.     }  
  13. }

  注意:重写(override)run()方法在该线程的start()方法被调用后,JVM会自动调用run方法来执行任务;但是重载(overload)run()方法,该方法和普通的成员方法一样,并不会因调用该线程的start()方法而被JVM自动运行。 例如:

  1. public class ThreadTest extends Thread {  
  2.     /** 
  3.      * 重写(Override)run()方法 JVM会自动调用该方法 
  4.      */ 
  5.     @Override 
  6.     public void run() {  
  7.         System.out.println("I'm running!");  
  8.     }  
  9.     /** 
  10.      * 重载(Overload)run()方法 和普通的方法一样,并不会在该线程的start()方法被调用后被JVM自动运行 
  11.      */ 
  12.     public void run(int times) {  
  13.         System.out.println("I'm running!(Overload)");  
  14.     }  
  15. }

  不建议使用此方法定义线程,因为采用继承Thread的方式定义线程后,你不能在继承其他的类了,导致程序的可扩展性大大降低。

  2)实现java.lang.Runnable接口

  1. /** 
  2.  * 通过实现Runnable接口创建一个线程 
  3.  * @author DreamSea 
  4.  */ 
  5. public class ThreadTest implements Runnable {  
  6.     public void run() {  
  7.             System.out.println("I'm running!");  
  8.     }  
  9. }

  线程的启动(Starting)

  任何一个线程的执行的前提都是必须有Thread class的实例存在,并且通过调用run()方法启动线程。

  1)如果线程是继承Thread类,则创建方式如下:

  1. ThreadTest1 tt = new ThreadTest1();  
  2. tt.start();

  2)如果是实现Runnable接口,则创建方式如下:

  1. ThreadTest2 tt = new ThreadTest2();  
  2. Thread t = new Thread(tt);  
  3. t.start();

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号