天天看點

Java 繼承Thread實作線程1. 知識點2. 實作3. 測試

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