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

    作者:课课家教育更新于: 2016-02-29 20:04:35

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

      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

课课家教育

未登录