Java線程的基本用法
摘要
多線程是軟件編程中常用的基本技術,本文主要介紹了Java中線程的基本用法,包括線程創建、運行、停止和暫停,還介紹了線程常用的API以及線程的優先級。通過本文的學習,讀者可以掌握線程的基本用法。
一、線程的創建及運行
線程的創建有三種方式:
1、繼承Thread
2、實現Runnable
3、實現Callable
1.1、繼承Thread
線程對象類直接繼承Thread類,並重寫Thread類的run()方法。如下所示:
public class ThreadTest extends Thread{
@Override
public void run() {
// 執行體代碼
}
}
該線程對象的運行,如下所示:
public static void main(String[] args) {
Thread thread01 = new ThreadTest();
thread01.start();
}
1.2、實習Runnable
Runnable是一個接口,線程對象類可以實現該接口,並重寫Runnable接口的run()方法。如下所示:
public class ThreadTest implements Runnable{
@Override
public void run() {
// 執行體代碼
}
}
該線程對象的運行,如下所示:
public static void main(String[] args) {
ThreadTest thread01 = new ThreadTest();
new Thread(thread01, "Thread-name").start();
}
1.3、實現Callable
實現Callable接口的線程,創建過程如下:
- 1.創建一個線程,創建Callable的實現類Race,並且重寫call方法;
- 2.得到Future對象;
- 3.獲取返回值;
- 4.停止服務;
//返回Interger類型
public class ThreadTest implements Callable<Integer>{
@Override
public Integer call() {
//執行體代碼
return Integer;
}
}
該線程對象的運行,如下所示:
public static void main(String[] args) {
ExecutorService ser = Executors.newFixedThreadPool(2);
ThreadTest threadTest = new ThreadTest();
//獲取值
Future<Integer> result = ser.submit(threadTest);
try {
int numR = result.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
//停止服務
ser.shutdown();
}
1.4、執行run()與start()的區別
執行run()時,並不會啓動該線程,只是相當於調用了一個普通方法。
執行start()時,啓動該線程,start()方法會在該線程中自動調用到run()方法。
二、常用的線程API
2.1、currentThread()方法
currentThread()方法返回當前代碼段所在的線程。
ThreadTest.java線程文件:
public class ThreadTest implements Runnable{
public ThreadTest(){
System.out.println("ThreadTest的構造函數所在線程:"+Thread.currentThread().getName());
}
@Override
public void run(){
System.out.println("ThreadTest的run函數所在線程:"+Thread.currentThread().getName());
}
}
Client.java程序入口文件:
public class Client{
public static void main(String[] args){
ThreadTest thread = new ThreadTest();
thread.start();
}
}
運行結果如下:
ThreadTest的構造函數所在線程:main
ThreadTest的run函數所在線程:Thread-0
由此可見線程類ThreadTest的構造函數是運行在main線程中的,而ThreadTest的run方法纔是運行在ThreadTest線程中的。