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線程中的。

三、線程的停止

四、線程的暫停

五、線程優先級

發佈了21 篇原創文章 · 獲贊 0 · 訪問量 1825
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章