TOP

2012年计算机二级Java多线程入门2(一)
2012-07-13 22:35:07 来源: 作者: 【 】 浏览:225次 评论:0
微信搜索关注"91考试网"公众号,领30元,获取公务员、事业编、教师等考试资料40G!
用Thread类创建线程

  在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。Thread类的构造方法被重载了八次,构造方法如下:

  1.public Thread( );

  2.public Thread(Runnable target);

  3.public Thread(String name);

  4.public Thread(Runnable target, String name);

  5.public Thread(ThreadGroup group, Runnable target);

  6.public Thread(ThreadGroup group, String name);

  7.public Thread(ThreadGroup group, Runnable target, String name);

  8.public Thread(ThreadGroup group, Runnable target, String name, long stackSize);

  Runnable target

  实现了Runnable接口的类的实例。要注意的是Thread类也实现了Runnable接口,因此,从Thread类继承的类的实例也可以作为target传入这个构造方法。

  String name

  线程的名子。这个名子可以在建立Thread实例后通过Thread类的setName方法设置。如果不设置线程的名子,线程就使用默认的线程名:Thread-N,N是线程建立的顺序,是一个不重复的正整数。

  ThreadGroup group

  当前建立的线程所属的线程组。如果不指定线程组,所有的线程都被加到一个默认的线程组中。关于线程组的细节将在后面的章节详细讨论。

  long stackSize

  线程栈的大小,这个值一般是CPU页面的整数倍。如x86的页面大小是4KB.在x86平台下,默认的线程栈大小是12KB。

  一个普通的Java类只要从Thread类继承,就可以成为一个线程类。并可通过Thread类的start方法来执行线程代码。虽然Thread类的子类可以直接实例化,但在子类中必须要覆盖Thread类的run方法才能真正运行线程的代码。下面的代码给出了一个使用Thread类建立线程的例子

  9.package mythread;

  10.

  11. public class Thread1 extends Thread

  12. {

  13. public void run()

  14. {

  15. System.out.println(this.getName());

  16. }

  17. public static void main(String[] args)

  18. {

  19. System.out.println(Thread.currentThread()。getName());

  20. Thread1 thread1 = new Thread1();

  21. Thread1 thread2 = new Thread1 ();

  22. thread1.start();

  23. thread2.start();

  24. }

  25. }

上面的代码建立了两个线程:thread1和thread2.上述代码中的005至008行是Thread1类的run方法。当在014和015行调用start方法时,系统会自动调用run方法。在007行使用this.getName()输出了当前线程的名字,由于在建立线程时并未指定线程名,因此,所输出的线程名是系统的默认值,也就是Thread-n的形式。在011行输出了主线程的线程名。

  上面代码的运行结果如下:

  main

  Thread-0

  Thread-1

  从上面的输出结果可以看出,第一行输出的main是主线程的名子。后面的Thread-1和Thread-2分别是thread1和thread2的输出结果。

  注意:任何一个Java程序都必须有一个主线程。一般这个主线程的名子为main.只有在程序中建立另外的线程,才能算是真正的多线程程序。也就是说,多线程程序必须拥有一个以上的线程。

  Thread类有一个重载构造方法可以设置线程名。除了使用构造方法在建立线程时设置线程名,还可以使用Thread类的setName方法修改线程名。要想通过Thread类的构造方法来设置线程名,必须在Thread的子类中使用Thread类的public Thread(String name)构造方法,因此,必须在Thread的子类中也添加一个用于传入线程名的构造方法。下面的代码给出了一个设置线程名的例子

  26.package mythread;

  27.

  28.public class Thread2 extends Thread

  29.{

  30. private String who;

  31.

  32. public void run()

  33. {

  34. System.out.println(who + ":" + this.getName());

  35. }

  36. public Thread2(String who)

  37. {

  38. super();

  39. this.who = who;

  40. }

  41. public Thread2(String who, String name)

  42. {

  43. super(name);

  44. this.who = who;

  45. }

  46. public static void main(String[] args)

  47. {

  48. Thread2 thread1 = new Thread2 ("thread1", "MyThread1");

  49. Thread2 thread2 = new Thread2 ("thread2");

  50. Thread2 thread3 = new Thread2 ("thread3");

  51. thread2.setName("MyThread2");

  52. thread1.start();

  53. thread2.start();

  54. thread3.start();

  55. }

  56.在类中有两个构造方法

  第011行:public sample2_2(String who)

  这个构造方法有一个参数:who.这个参数用来标识当前建立的线程。在这个构造方法中仍然调用Thread的默认构造方法public Thread( )。

  第016行:public sample2_2(String who, String name)

  这个构造方法中的who和第一个构造方法的who的含义一样,而name参数就是线程的名名。在这个构造方法中调用了Thread类的public Thread(String name)构造方法,也就是第018行的super(name)。

  在main方法中建立了三个线程:thread1、thread2和thread3.其中thread1通过构造方法来设置线程名,thread2通过setName方法来修改线程名,thread3未设置线

Tags: 责任编辑:91kaoshiwang
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇2012计算机二级考试C语言程序设计.. 下一篇2012年计算机二级Java多线程入门..

相关栏目

最新文章

推荐文章

网站客服QQ: 960335752 - 14613519 - 48225117