事不如人願,最近比較動盪,想想還是把java的基礎知識都整理下,好面對後續的大變動。這一節主要介紹下線程實現的幾個實例
一、Runnable
/**
* 線程實現一:通過實現Runnable接口創建線程類(1.創建一個Runnable接口子類 MyRunable,並且重寫run方法;2.實例化MyRunable的實例,作爲入參提供給Thread)
* 步驟:1.定義Runnable接口的實現類,並重寫該接口的run()方法;2.創建Runnable實現類的實例,並以此實例作爲Thread的target對象,即該Thread對象纔是真正的線程對象
* 具體框架: Thread t = new Thread(new Runnable() {public void run() {邏輯實現}}); t.start();
*/
public class DoRunnable {
public static void thread1(){
//寫法一:Runnable接口實現類寫在其它地方
for(int i = 0; i < 10; i++) {
Thread t1 = new Thread(new MyRunable());
t1.start();
}
//寫法二:Runnable接口實現類在當前類實現,推薦寫法
for(int i = 0; i < 10; i++) {
Thread t2 = new Thread(new Runnable() {
public void run() {
System.out.println("<<<<<<<<<<<<"+ "function1-2:" + Thread.currentThread().getName() + "<<<<<<<<<<<"+ System.currentTimeMillis()+"" +"<<<<<<<<<<<");
}
});
t2.start();
}
//錯誤操作:for循環加到哪裏才能啓用不同線程?一定要在t.start中t的最外層(即for循環裏面完成多線程操作),如下實際10次循環都是一個線程在進行,線程名稱都一致
Thread t3 = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("<<<<<<<<<<<<"+ "function1-3:" + Thread.currentThread().getName() + "<<<<<<<<<<<"+ System.currentTimeMillis()+"" +"<<<<<<<<<<<");
}
}
});
t3.start();
}
public static void main(String[] args) {
thread1();
}
}
/**
*
* Runnable接口子類的實例
*
*/
public class MyRunable implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("<<<<<<<<<<<<"+ "function1-1:" + Thread.currentThread().getName() + "<<<<<<<<<<<"+ System.currentTimeMillis()+"" +"<<<<<<<<<<<");
}
}
運行結果:
<<<<<<<<<<<<function1-1:Thread-1<<<<<<<<<<<1565169345774<<<<<<<<<<<
<<<<<<<<<<<<function1-1:Thread-0<<<<<<<<<<<1565169345774<<<<<<<<<<<
<<<<<<<<<<<<function1-1:Thread-2<<<<<<<<<<<1565169345774<<<<<<<<<<<
<<<<<<<<<<<<function1-1:Thread-3<<<<<<<<<<<1565169345774<<<<<<<<<<<
<<<<<<<<<<<<function1-1:Thread-4<<<<<<<<<<<1565169345775<<<<<<<<<<<
<<<<<<<<<<<<function1-1:Thread-5<<<<<<<<<<<1565169345775<<<<<<<<<<<
<<<<<<<<<<<<function1-1:Thread-6<<<<<<<<<<<1565169345775<<<<<<<<<<<
<<<<<<<<<<<<function1-1:Thread-7<<<<<<<<<<<1565169345775<<<<<<<<<<<
<<<<<<<<<<<<function1-1:Thread-8<<<<<<<<<<<1565169345776<<<<<<<<<<<
<<<<<<<<<<<<function1-1:Thread-9<<<<<<<<<<<1565169345776<<<<<<<<<<<
<<<<<<<<<<<<function1-2:Thread-10<<<<<<<<<<<1565169345776<<<<<<<<<<<
<<<<<<<<<<<<function1-2:Thread-13<<<<<<<<<<<1565169345776<<<<<<<<<<<
<<<<<<<<<<<<function1-2:Thread-12<<<<<<<<<<<1565169345776<<<<<<<<<<<
<<<<<<<<<<<<function1-2:Thread-11<<<<<<<<<<<1565169345776<<<<<<<<<<<
<<<<<<<<<<<<function1-2:Thread-16<<<<<<<<<<<1565169345777<<<<<<<<<<<
<<<<<<<<<<<<function1-2:Thread-14<<<<<<<<<<<1565169345777<<<<<<<<<<<
<<<<<<<<<<<<function1-2:Thread-15<<<<<<<<<<<1565169345777<<<<<<<<<<<
<<<<<<<<<<<<function1-2:Thread-17<<<<<<<<<<<1565169345777<<<<<<<<<<<
<<<<<<<<<<<<function1-2:Thread-19<<<<<<<<<<<1565169345777<<<<<<<<<<<
<<<<<<<<<<<<function1-2:Thread-18<<<<<<<<<<<1565169345777<<<<<<<<<<<
<<<<<<<<<<<<function1-3:Thread-20<<<<<<<<<<<1565169345778<<<<<<<<<<<
<<<<<<<<<<<<function1-3:Thread-20<<<<<<<<<<<1565169345778<<<<<<<<<<<
<<<<<<<<<<<<function1-3:Thread-20<<<<<<<<<<<1565169345778<<<<<<<<<<<
<<<<<<<<<<<<function1-3:Thread-20<<<<<<<<<<<1565169345778<<<<<<<<<<<
<<<<<<<<<<<<function1-3:Thread-20<<<<<<<<<<<1565169345778<<<<<<<<<<<
<<<<<<<<<<<<function1-3:Thread-20<<<<<<<<<<<1565169345778<<<<<<<<<<<
<<<<<<<<<<<<function1-3:Thread-20<<<<<<<<<<<1565169345778<<<<<<<<<<<
<<<<<<<<<<<<function1-3:Thread-20<<<<<<<<<<<1565169345778<<<<<<<<<<<
<<<<<<<<<<<<function1-3:Thread-20<<<<<<<<<<<1565169345778<<<<<<<<<<<
<<<<<<<<<<<<function1-3:Thread-20<<<<<<<<<<<1565169345778<<<<<<<<<<<
二、Thread
/**
* 線程實現二:通過繼承Thread類創建線程類
* 步驟:1.定義一個繼承Thread類的子類,並重寫該類的run()方法;2.創建Thread子類的實例,即創建了線程對象;3.調用該線程對象的start()方法啓動線程
* 具體框架: MyThread繼承Thread重寫run方法 Thread t = new MyThread(); t.start();
*/
public class DoThread extends Thread{
public static void thread2() {
for(int i = 0; i < 10; i++) {
Thread t = new MyThread();
t.start();
}
}
public static void main(String[] args) {
thread2();
}
}
public class MyThread extends Thread {
public void run() {
System.out.println("<<<<<<<<<<<<"+ "function2:" + Thread.currentThread().getName() + "<<<<<<<<<<<"+ System.currentTimeMillis()+"" +"<<<<<<<<<<<");
}
}
運行結果:
<<<<<<<<<<<<function2:Thread-0<<<<<<<<<<<1565170183877<<<<<<<<<<<
<<<<<<<<<<<<function2:Thread-3<<<<<<<<<<<1565170183877<<<<<<<<<<<
<<<<<<<<<<<<function2:Thread-1<<<<<<<<<<<1565170183877<<<<<<<<<<<
<<<<<<<<<<<<function2:Thread-2<<<<<<<<<<<1565170183877<<<<<<<<<<<
<<<<<<<<<<<<function2:Thread-4<<<<<<<<<<<1565170183878<<<<<<<<<<<
<<<<<<<<<<<<function2:Thread-5<<<<<<<<<<<1565170183878<<<<<<<<<<<
<<<<<<<<<<<<function2:Thread-6<<<<<<<<<<<1565170183878<<<<<<<<<<<
<<<<<<<<<<<<function2:Thread-7<<<<<<<<<<<1565170183878<<<<<<<<<<<
<<<<<<<<<<<<function2:Thread-8<<<<<<<<<<<1565170183878<<<<<<<<<<<
<<<<<<<<<<<<function2:Thread-9<<<<<<<<<<<1565170183879<<<<<<<<<<<
三、Callable
。。。
總結: