當前位置:名人名言大全網 - 短信平臺 - java 多線程

java 多線程

所要執行的指令,也包括了執行指令所需的系統資源,不同進程所占用的系統資源相對獨立。所以進程是重量級的任務,它們之間的通信和轉換都需要操作系統付出較大的開銷。

線程是進程中的壹個實體,是被系統獨立調度和分派的基本單位。線程自己基本上不擁有系統資源,但它可以與同屬壹個進程的其他線程***享進程所擁有的全部資源。所以線程是輕量級的任務,它們之間的通信和轉換只需要較小的系統開銷。

Java支持多線程編程,因此用Java編寫的應用程序可以同時執行多個任務。Java的多線程機制使用起來非常方便,用戶只需關註程序細節的實現,而不用擔心後臺的多任務系統。

Java語言裏,線程表現為線程類。Thread線程類封裝了所有需要的線程操作控制。在設計程序時,必須很清晰地區分開線程對象和運行線程,可以將線程對象看作是運行線程的控制面板。在線程對象裏有很多方法來控制壹個線程是否運行,睡眠,掛起或停止。線程類是控制線程行為的唯壹的手段。壹旦壹個Java程序啟動後,就已經有壹個線程在運行。可通過調用Thread.currentThread方法來查看當前運行的是哪壹個線程。

class ThreadTest{

public static void main(String args[]){

Thread t = Thread.currentThread();

t.setName("單線程"); //對線程取名為"單線程"

t.setPriority(8);

//設置線程優先級為8,最高為10,最低為1,默認為5

System.out.println("The running thread: " + t);

// 顯示線程信息

try{

for(int i=0;i<3;i++){

System.out.println("Sleep time " + i);

Thread.sleep(100); // 睡眠100毫秒

}

}catch(InterruptedException e){// 捕獲異常

System.out.println("thread has wrong");

}

}

}

多線程的實現方法

繼承Thread類

可通過繼承Thread類並重寫其中的run()方法來定義線程體以實現線程的具體行為,然後創建該子類的對象以創建線程。

在繼承Thread類的子類ThreadSubclassName中重寫run()方法來定義線程體的壹般格式為:

public class ThreadSubclassName extends Thread{

public ThreadSubclassName(){

..... // 編寫子類的構造方法,可缺省

}

public void run(){

..... // 編寫自己的線程代碼

}

}

用定義的線程子類ThreadSubclassName創建線程對象的壹般格式為:

ThreadSubclassName ThreadObject =

new ThreadSubclassName();

然後,就可啟動該線程對象表示的線程:

ThreadObject.start(); //啟動線程

應用繼承類Thread的方法實現多線程的程序。本程序創建了三個單獨的線程,它們分別打印自己的“Hello World!”。

class ThreadDemo extends Thread{

private String whoami;

private int delay;

public ThreadDemo(String s,int d){

whoami=s;

delay=d;

}

public void run(){

try{

sleep(delay);

}catch(InterruptedException e)

System.out.println("Hello World!" + whoami

+ " " + delay);

}

}

public class MultiThread{

public static void main(String args[]){

ThreadDemo t1,t2,t3;

t1 = new ThreadDemo("Thread1",

(int)(Math.random()*2000));

t2 = new ThreadDemo("Thread2",

(int)(Math.random()*2000));

t3 = new ThreadDemo("Thread3",

(int)(Math.random()*2000));

t1.start();

t2.start();

t3.start();

}

}

實現Runnable接口

編寫多線程程序的另壹種的方法是實現Runnable接口。在壹個類中實現Runnable接口(以後稱實現Runnable接口的類為Runnable類),並在該類中定義run()方法,然後用帶有Runnable參數的Thread類構造方法創建線程。

創建線程對象可用下面的兩個步驟來完成:

(1)生成Runnable類ClassName的對象

ClassName RunnableObject = new ClassName();

(2)用帶有Runnable參數的Thread類構造方法創建線程對象。新創建的線程的指針將指向Runnable類的實例。用該Runnable類的實例為線程提供 run()方法---線程體。

Thread ThreadObject = new Thread(RunnableObject);

然後,就可啟動線程對象ThreadObject表示的線程:

ThreadObject.start();

在Thread類中帶有Runnable接口的構造方法有:

public Thread(Runnable target);

public Thread(Runnable target, String name);

public Thread(String name);

public Thread(ThreadGroup group,Runnable target);

public Thread(ThreadGroup group,Runnable target,

String name);

其中,參數Runnable target表示該線程執行時運行target的run()方法,String name以指定名字構造線程,ThreadGroup group表示創建線程組。

用Runnable接口實現的多線程。

class TwoThread implements Runnable{

TwoThread(){

Thread t1 = Thread.currentThread();

t1.setName("第壹主線程");

System.out.println("正在運行的線程: " + t1);

Thread t2 = new Thread(this,"第二線程");

System.out.println("創建第二線程");

t2.start();

try{

System.out.println("第壹線程休眠");

Thread.sleep(3000);

}catch(InterruptedException e){

System.out.println("第壹線程有錯");

}

System.out.println("第壹線程退出");

}

public void run(){

try{

for(int i = 0;i < 5;i++){

System.out.println(“第二線程的休眠時間:”

+ i);

Thread.sleep(1000);

}

}catch(InterruptedException e){

System.out.println("線程有錯");

}

System.out.println("第二線程退出");

}

public static void main(String args[]){

new TwoThread();

}

}

程序運行結果如下:

正在運行的線程: Thread[第壹主線程,5,main

創建第二線程

第壹線程休眠

第二線程的休眠時間:0

第二線程的休眠時間:1

第二線程的休眠時間:2

第壹線程退出

第二線程的休眠時間:3

第二線程的休眠時間:4

第二線程退出

另外,虛機團上產品團購,超級便宜