天天看點

7.0 線程Thread和Runnable

*五大狀态

*線程優先級 => 有助于作業系統确定線程的排程順序但不能保證

*建立線程的三種方式:

通過實作 Runnable 接口;

通過繼承 Thread 類本身;

通過 Callable 和 Future 建立線程。

注:新線程建立後必須調用他的start方法才會運作

例子:

1.實作Runnable 接口建立線程

package com.test;

public class RunnableDemo implements Runnable {

private Thread t;

private String threadName;

RunnableDemo( String name) {

threadName = name;

System.out.println("Creating " + threadName );

}

@Override

public void run() {

// TODO Auto-generated method stub

System.out.println("Running " + threadName );

try {

for (int i = 4; i > 0; i--) {

System.out.println("Thread: " + threadName + ", " + i);

// 讓線程睡眠一會

Thread.sleep(50);

}

} catch (InterruptedException e) {

// TODO: handle exception

System.out.println("Thread " + threadName + " interrupted.");

}

System.out.println("Thread " + threadName + " exiting.");

public void start () {

System.out.println("Starting " + threadName );

if (t == null) {

t = new Thread (this, threadName);

t.start ();

}

}

2.繼承Thread類建立線程

public class ThreadDemo extends Thread{

ThreadDemo( String name) {

System.out.println("Creating " + threadName );

public void run(){

System.out.println("Running " + threadName );

System.out.println("Thread " + threadName + " exiting.");

}

public void start () {

System.out.println("Starting " + threadName );

}

//測試線程運作(兩種方式)

public class TestThread {

public static void main(String[] args) {

//第一種

/*RunnableDemo R1 = new RunnableDemo( "Thread-1");

R1.start();

RunnableDemo R2 = new RunnableDemo( "Thread-2");

R2.start();*/

//第二種

ThreadDemo T1 = new ThreadDemo( "Thread-1");

T1.start();

ThreadDemo T2 = new ThreadDemo( "Thread-2");

T2.start();