您的位置:首页 > 其它

线程的创建与启动

2011-05-04 15:31 232 查看
线程的创建与启动

可通过两种方法来定义线程

一、定义线程

1.扩展java.lang.Thread

public void run();

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

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

2.实现java.lang.Runnable

void run();

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



二、实例化线程

1.如果是Thread的扩展,直接new即可。

2.如果是实现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()方法将运行。

注意:在Runnable或者Thread类内部调用run方法并不启动新的线程。



四、案例

/*
 * 扩展Thread
 */
package threadtest;
public class ThreadTest extends Thread {
    private String threadName;
    private int threadCount;
    
    ThreadTest(String threadName){
        this.threadName = threadName;
        this.threadCount = 0;
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Thread t1 = new ThreadTest("#1");
        Thread t2 = new ThreadTest("#2"); 
        t1.start();
        t2.start();
    }
    
    public void run(){
        for(int i=0;i<5;i++){
            try{
                Thread.sleep(500);
            }catch(InterruptedException e){
                System.out.println(threadName+":中止");
            }
            System.out.println(threadName+":"+i);
            threadCount++;
        }
    }
}
/*
 * 实现Runnable接口
 */
package threadtest;
import java.util.logging.Level;
import java.util.logging.Logger;
public class RunnableTest implements Runnable {
    private String ThreadName;
    
    public RunnableTest(String ThreadName){
        this.ThreadName = ThreadName;
    }
    
    public void run() {
        System.out.println(ThreadName+":线程开始");
        for(int i=1; i<5 ; i++){
            try {
                Thread.sleep(100);
            } catch (InterruptedException ex) {
                Logger.getLogger(RunnableTest.class.getName()).log(Level.SEVERE, null, ex);
            }
            System.out.println(ThreadName+":"+i);
        }
        System.out.println(ThreadName+":线程结束");
    }
    
}
/*
 * 调用RunnableTest
 */
package threadtest;
import java.util.logging.Level;
import java.util.logging.Logger;
public class TestRunnable {
    public static void main(String[] args){
        RunnableTest r1 = new RunnableTest("#1");
        RunnableTest r2 = new RunnableTest("#2");
        
        Thread t1 = new Thread(r1);
        Thread t2 = new Thread(r2);
        
        t1.start();
        t2.start();
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: