java根本教程之經常使用的完成多線程的兩種方法 java多線程教程。本站提示廣大學習愛好者:(java根本教程之經常使用的完成多線程的兩種方法 java多線程教程)文章只能為提供參考,不一定能成為您想要的結果。以下是java根本教程之經常使用的完成多線程的兩種方法 java多線程教程正文
關於線程池的內容,我們今後會具體引見;如今,先對的Thread和Runnable停止懂得。本章內容包含:
Thread和Runnable的簡介
Thread和Runnable的異同點
Thread和Runnable的多線程的示例
Thread和Runnable簡介
Runnable 是一個接口,該接口中只包括了一個run()辦法。它的界說以下:
public interface Runnable {
public abstract void run();
}
Runnable的感化,完成多線程。我們可以界說一個類A完成Runnable接口;然後,經由過程new Thread(new A())等方法新建線程。
Thread 是一個類。Thread自己就完成了Runnable接口。它的聲明以下:
public class Thread implements Runnable {}
Thread的感化,完成多線程。
Thread和Runnable的異同點
Thread 和 Runnable 的雷同點:都是“多線程的完成方法”。
Thread 和 Runnable 的分歧點:
Thread 是類,而Runnable是接口;Thread自己是完成了Runnable接口的類。我們曉得“一個類只能有一個父類,然則卻能完成多個接口”,是以Runnable具有更好的擴大性。
另外,Runnable還可以用於“資本的同享”。即,多個線程都是基於某一個Runnable對象樹立的,它們會同享Runnable對象上的資本。
平日,建議經由過程“Runnable”完成多線程!
Thread和Runnable的多線程示例
1. Thread的多線程示例
上面經由過程示例更好的懂得Thread和Runnable,自創網上一個例子比擬具有壓服性的例子。
// ThreadTest.java 源碼
class MyThread extends Thread{
private int ticket=10;
public void run(){
for(int i=0;i<20;i++){
if(this.ticket>0){
System.out.println(this.getName()+" 賣票:ticket"+this.ticket--);
}
}
}
};
public class ThreadTest {
public static void main(String[] args) {
// 啟動3個線程t1,t2,t3;每一個線程各賣10張票!
MyThread t1=new MyThread();
MyThread t2=new MyThread();
MyThread t3=new MyThread();
t1.start();
t2.start();
t3.start();
}
}
運轉成果:
Thread-0 賣票:ticket10
Thread-1 賣票:ticket10
Thread-2 賣票:ticket10
Thread-1 賣票:ticket9
Thread-0 賣票:ticket9
Thread-1 賣票:ticket8
Thread-2 賣票:ticket9
Thread-1 賣票:ticket7
Thread-0 賣票:ticket8
Thread-1 賣票:ticket6
Thread-2 賣票:ticket8
Thread-1 賣票:ticket5
Thread-0 賣票:ticket7
Thread-1 賣票:ticket4
Thread-2 賣票:ticket7
Thread-1 賣票:ticket3
Thread-0 賣票:ticket6
Thread-1 賣票:ticket2
Thread-2 賣票:ticket6
成果解釋:
(01) MyThread繼續於Thread,它是自界說個線程。每一個MyThread都邑賣出10張票。
(02) 主線程main創立並啟動3個MyThread子線程。每一個子線程都各自賣出了10張票。
2. Runnable的多線程示例
上面,我們對下面的法式停止修正。經由過程Runnable完成一個接口,從而完成多線程。
// RunnableTest.java 源碼
class MyThread implements Runnable{
private int ticket=10;
public void run(){
for(int i=0;i<20;i++){
if(this.ticket>0){
System.out.println(Thread.currentThread().getName()+" 賣票:ticket"+this.ticket--);
}
}
}
};
public class RunnableTest {
public static void main(String[] args) {
MyThread mt=new MyThread();
// 啟動3個線程t1,t2,t3(它們共用一個Runnable對象),這3個線程一共賣10張票!
Thread t1=new Thread(mt);
Thread t2=new Thread(mt);
Thread t3=new Thread(mt);
t1.start();
t2.start();
t3.start();
}
}
運轉成果:
Thread-0 賣票:ticket10
Thread-2 賣票:ticket8
Thread-1 賣票:ticket9
Thread-2 賣票:ticket6
Thread-0 賣票:ticket7
Thread-2 賣票:ticket4
Thread-1 賣票:ticket5
Thread-2 賣票:ticket2
Thread-0 賣票:ticket3
Thread-1 賣票:ticket1
成果解釋:
(01) 和下面“MyThread繼續於Thread”分歧;這裡的MyThread完成了Thread接口。
(02) 主線程main創立並啟動3個子線程,並且這3個子線程都是基於“mt這個Runnable對象”而創立的。運轉成果是這3個子線程一共賣出了10張票。這解釋它們是同享了MyThread接口的。