下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Java学习者须知:Java开发中实现一个简单的多线程

作者:课课家教育     来源: http://www.kokojia.com点击数:1068发布时间: 2016-02-29 20:04:35

标签: java开发工程师java分布式开发java框架有哪些

大神带你学编程,欢迎选课

  Java学习者须知:Java开发中实现一个简单的多线程_java开发工程师_java分布式开发_课课家

       首先,定义线程。

  1)扩展java.lang.Thread类。

  此类中有个run()方法,应该注意其用法:

  public void run()

  如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。

  Thread 的子类应该重写该方法。

  2)实现java.lang.Runnable接口。

  void run()

  使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run 方法。

  方法 run 的常规协定是,它可能执行任何所需的操作。

  实例化线程

  如果是扩展java.lang.Thread类的线程,则直接new即可。

  如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法:

  Thread(Runnable target)

  Thread(Runnable target, String name)

  Thread(ThreadGroup group, Runnable target)

  Thread(ThreadGroup group, Runnable target, String name)

  Thread(ThreadGroup group, Runnable target, String name, long stackSize)

  启动线程

  在线程的Thread对象上调用start()方法,而不是run()或者别的方法。

  在调用start()方法之前:线程处于新状态中,新状态指有一个Thread对象,但还没有一个真正的线程。

  在调用start()方法之后:发生了一系列复杂的事情

  启动新的执行线程(具有新的调用栈);

  该线程从新状态转移到可运行状态;

  当该线程获得机会执行时,其目标run()方法将运行。

  注意:对Java来说,run()方法没有任何特别之处。像main()方法一样,它只是新线程知道调用的方法名称(和签名)。因此,在Runnable上或者Thread上调用run方法是合法的。但并不启动新的线程。

  例子  运行结果:

  1.package thread_test;

  2.

  3./**

  4. * 测试Runnable类实现的多线程程序

  5. *

  6. * @author ciding

  7. * @createTime Dec 7, 2011 9:38:52 AM

  8. *

  9. */

  10.public class TestRunnable {

  11. public static void main(String[] args) {

  12. StrRunnable sr1 = new StrRunnable("chenfengbin");

  13. StrRunnable sr2 = new StrRunnable("cidng");

  14.

  15. Thread t1 = new Thread(sr1);

  16. Thread t2 = new Thread(sr2);

  17.

  18. t1.start();

  19. t2.start();

  20.

  21. StrThread st1 = new StrThread("chenfengbin");

  22. StrThread st2 = new StrThread("cidng");

  23.

  24. Thread t3 = new Thread(st1);

  25. Thread t4 = new Thread(st2);

  26.

  27. t3.start();

  28. t4.start();

  29. }

  30.}

  31.

  32./**

  33. * 通过实现接口的多线程

  34. *

  35. * @author ciding

  36. * @createTime Dec 8, 2011 10:20:28 PM

  37. *

  38. */

  39.class StrRunnable implements Runnable {

  40. private String name;

  41.

  42. public StrRunnable(String name) {

  43. this.name = name;

  44. }

  45.

  46. public void run() {

  47. for (int i = 0; i < 3; i++) {

  48. for(long j=0;j<100000000;j++); //用来模拟一个非常耗时的操作,方便显示多线程效果。

  49. System.out.println("Runnable下的" + name + ": " + i);

  50. }

  51. }

  52.}

  53.

  54./**

  55. * 通过继承类的多线程

  56. *

  57. * @author ciding

  58. * @createTime Dec 8, 2011 10:20:50 PM

  59. *

  60. */

  61.class StrThread extends Thread{

  62. private String name;

  63.

  64. public StrThread(String name){

  65. this.name = name;

  66. }

  67.

  68. public void run() {

  69. for (int i = 0; i < 3; i++) {

  70. for(long j=0;j<100000000;j++); //用来模拟一个非常耗时的操作,方便显示多线程效果。

  71. System.out.println("Thread下的" + name + ": " + i);

  72. }

  73. }

  74.}

  1.Runnable下的chenfengbin: 0

  2.Runnable下的cidng: 0

  3.Thread下的chenfengbin: 0

  4.Thread下的cidng: 0

  5.Runnable下的chenfengbin: 1

  6.Runnable下的cidng: 1

  7.Thread下的chenfengbin: 1

  8.Thread下的cidng: 1

  9.Runnable下的chenfengbin: 2

  10.Thread下的chenfengbin: 2

  11.Runnable下的cidng: 2

  12.Thread下的cidng: 2

赞(10)
踩(2)
分享到:
华为认证网络工程师 HCIE直播课视频教程