首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

兑现一个简单的多线程

2012-10-27 
实现一个简单的多线程一、定义线程?1、扩展java.lang.Thread类。此类中有个run()方法,应该注意其用法:public

实现一个简单的多线程
一、定义线程?1、扩展java.lang.Thread类。此类中有个run()方法,应该注意其用法:public void run()?

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

?

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

?

2、实现java.lang.Runnable接口。void run()

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

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

?二、实例化线程1、如果是扩展java.lang.Thread类的线程,则直接new即可。2、如果是实现了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方法是合法的。但并不启动新的线程。?四、例子
package thread_test;/** * 测试Runnable类实现的多线程程序  *  * @author ciding  * @createTime Dec 7, 2011 9:38:52 AM * */public class TestRunnable {     public static void main(String[] args) {     StrRunnable sr1 = new StrRunnable("chenfengbin");    StrRunnable sr2 = new StrRunnable("cidng");        Thread t1 = new Thread(sr1);        Thread t2 = new Thread(sr2);        t1.start();         t2.start();                 StrThread st1 = new StrThread("chenfengbin");        StrThread st2 = new StrThread("cidng");        Thread t3 = new Thread(st1);        Thread t4 = new Thread(st2);        t3.start();         t4.start();     }}/** * 通过实现接口的多线程 *  * @author ciding  * @createTime Dec 8, 2011 10:20:28 PM * */class StrRunnable  implements Runnable {     private String name;     public StrRunnable(String name) {         this.name = name;     }     public void run() {         for (int i = 0; i < 3; i++) {         for(long j=0;j<100000000;j++);//用来模拟一个非常耗时的操作,方便显示多线程效果。            System.out.println("Runnable下的" + name + ": " + i);        }     } }/** * 通过继承类的多线程 *  * @author ciding  * @createTime Dec 8, 2011 10:20:50 PM * */class StrThread extends Thread{private String name;public StrThread(String name){this.name = name;}public void run() {         for (int i = 0; i < 3; i++) {         for(long j=0;j<100000000;j++);//用来模拟一个非常耗时的操作,方便显示多线程效果。            System.out.println("Thread下的" + name + ": " + i);        }     }}
?运行结果:
Runnable下的chenfengbin: 0Runnable下的cidng: 0Thread下的chenfengbin: 0Thread下的cidng: 0Runnable下的chenfengbin: 1Runnable下的cidng: 1Thread下的chenfengbin: 1Thread下的cidng: 1Runnable下的chenfengbin: 2Thread下的chenfengbin: 2Runnable下的cidng: 2Thread下的cidng: 2
??思考问题: ?????? 1,直接调用run()方法,与一般程序有区别吗?会启动一个新的线程吗?那启动一个新线程是怎么运做的呢。?????? 2,线程有名字吗??????? 3,线程是怎么调度的呢?我们是不是影响线程调度的方式。?????? 4,线程有哪些运行状态??????? 5,线程都有哪些常见方法?是的,这些问题将在后面的环节一一解答。Java线程及线程池专题:http://ciding.iteye.com/admin/blogs/1300110
??

热点排行