在Java中負責線程的這個功能的是Java.lang.Thread 這個類。
1,可以通過建立 Thread 的執行個體來建立新的線程。每個線程都是通過某個特定Thread對象所對應的方法run( )來完成其操作的,方法run( )稱為線程體。通過調用Thead類的start()方法來啟動一個線程。
2,也可以通過實作Runnable接口,再重寫run方法然後建立對象,調用start()方法啟動線程。
繼承Thread類方式的缺點:如果我們的類已經從一個類繼承(如小程式必須繼承自Applet 類),則無法再繼承 Thread 類。而通過Runnable接口可以實作多線程。
其優點:可以同時實作繼承。實作Runnable接口方式要通用一些。
1)避免單繼承
2)友善共享資源 同一份資源 多個代理通路
繼承Thread的示例:
public class ThreadDemo extends Thread{
@Override
public void run() {
for(int i=1;i<=1000;i++){
System.out.println("thread:"+i);
}
}
public static void main(String[] args) {
ThreadDemo t=new ThreadDemo();
//線程中 調用start()方法代替run()方法
t.start();
for(int i=1;i<=1000;i++){
System.out.println("main:"+i);
}
}
}
實作Runnable接口的示例:
public class RunnableDemo implements Runnable {
public void run() {
for(int i=1;i<=1000;i++){
System.out.println("Runnable:"+i);
}
}
public static void main(String[] args) {
RunnableDemo rd=new RunnableDemo();
Thread t=new Thread(rd);
t.start();
for(int i=1;i<=1000;i++){
System.out.println("main:"+i);
}
}
}
也可以在一個類中同時繼承和實作,比如輸出1-100之間的偶數的示例:
public class NumOne extends Thread implements Runnable{
@Override
public void run() {
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) {
System.out.println(i);
}
}
}
public static void main(String[] args) {
NumOne no=new NumOne();
no.start();
Thread t=new Thread(no);
t.start();
}
}