1. 知識點
實作線程非常簡單,通過繼承Thread類即可,繼承後的run()方法會在單獨的線程中跑。
2. 實作
通過繼承Thread實作一個線程,功能是往檔案中寫點東西。
package org.maoge.thread;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* 寫檔案線程
*/
public class WriteFileThread extends Thread {
private String fileName;
public WriteFileThread(String filename) {
this.fileName = filename;
}
@Override
public void run() {
byte buffer[] = new byte[1000000];
OutputStream out = null;
try {
out = new FileOutputStream(fileName);
out.write(buffer, 0, buffer.length);
System.out.println("[" + fileName + "]-endTime:" + System.currentTimeMillis());
} catch (Exception ex) {
System.out.println(ex.toString());
} finally {
try {
out.close();
} catch (IOException ioEx) {
System.out.println(ioEx.toString());
}
}
}
}
3. 測試
/**
* 寫檔案測試
*/
public class WriteFileTest {
public static void main(String[] args) {
System.out.println("startTime:" + System.currentTimeMillis());
for (int i = 0; i < 10; i++) {
WriteFileThread writeFile = new WriteFileThread("D:\\temp\\" + (i + 500) + ".txt");
writeFile.start();
}
}
}
運作結果如下,注意觀察能發現,不是開始的早就結束的早。
startTime:1586956308113
[D:\temp\500.txt]-endTime:1586956308116
[D:\temp\501.txt]-endTime:1586956308116
[D:\temp\502.txt]-endTime:1586956308116
[D:\temp\506.txt]-endTime:1586956308117
[D:\temp\505.txt]-endTime:1586956308119
[D:\temp\504.txt]-endTime:1586956308120
[D:\temp\507.txt]-endTime:1586956308120
[D:\temp\503.txt]-endTime:1586956308120
[D:\temp\508.txt]-endTime:1586956308121
[D:\temp\509.txt]-endTime:1586956308121