java简单多线程,Java开发:实现一个简单的多线程

【IT168技术】首先,定义线程。

1)扩展java.lang.Thread类。

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

publicvoidrun()

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

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

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

voidrun()

使用实现接口 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,longstackSize)

启动线程

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

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

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

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

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

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

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

例子  运行结果:

1.packagethread_test;2.3./**4. * 测试Runnable类实现的多线程程序

5. *

6. *@authorciding

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

8. *

9.*/10.publicclassTestRunnable {11.publicstaticvoidmain(String[] args) {12.        StrRunnable sr1=newStrRunnable("chenfengbin");13.        StrRunnable sr2=newStrRunnable("cidng");14.15.        Thread t1=newThread(sr1);16.        Thread t2=newThread(sr2);17.18.        t1.start();19.        t2.start();20.21.        StrThread st1=newStrThread("chenfengbin");22.        StrThread st2=newStrThread("cidng");23.24.        Thread t3=newThread(st1);25.        Thread t4=newThread(st2);26.27.        t3.start();28.        t4.start();29.    }30.}31.32./**33. * 通过实现接口的多线程

34. *

35. *@authorciding

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

37. *

38.*/39.classStrRunnableimplementsRunnable {40.privateString name;41.42.publicStrRunnable(String name) {43.this.name=name;44.    }45.46.publicvoidrun() {47.for(inti=0; i<3; i++) {48.for(longj=0;j<100000000;j++);//用来模拟一个非常耗时的操作,方便显示多线程效果。49.            System.out.println("Runnable下的"+name+":"+i);50.        }51.    }52.}53.54./**55. * 通过继承类的多线程

56. *

57. *@authorciding

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

59. *

60.*/61.classStrThreadextendsThread{62.privateString name;63.64.publicStrThread(String name){65.this.name=name;66.    }67.68.publicvoidrun() {69.for(inti=0; i<3; i++) {70.for(longj=0;j<100000000;j++);//用来模拟一个非常耗时的操作,方便显示多线程效果。71.            System.out.println("Thread下的"+name+":"+i);72.        }73.    }74.}

1.Runnable下的chenfengbin:02.Runnable下的cidng:03.Thread下的chenfengbin:04.Thread下的cidng:05.Runnable下的chenfengbin:16.Runnable下的cidng:17.Thread下的chenfengbin:18.Thread下的cidng:19.Runnable下的chenfengbin:210.Thread下的chenfengbin:211.Runnable下的cidng:212.Thread下的cidng:2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值