1. 程式人生 > >多執行緒(一)執行緒建立的三種方式

多執行緒(一)執行緒建立的三種方式

建立執行緒的三種方式:

1.第一種方式繼承Thread類,重寫Thread類中的run方法,還需要呼叫start方法,start方法相當於通知CPU,執行緒已經就緒,CPU在合適的時間點呼叫該執行緒的run方法;我們程式中的main方法,我們稱之為主執行緒。

2.建立執行緒的第二種方式,實現Runnable介面,並重寫run方法,建立例項之後,將該例項包裝成Thread例項,繼續呼叫start方法讓執行緒就緒,因為Runnable是一個函式式介面,因此可以通過Lambda表示式,進行Runnable例項的建立;
3.建立執行緒的第三種方式,實現Callable,重寫該介面的call方法,call方法不同於run方法,run方法沒有返回值,而call

方法有返回值;
    第一步:建立Callable例項,重寫call方法
    第二步:將Callable例項傳入FutureTask構造器中,得到FutureTask例項
    第三步:建立Thread例項,將FutureTask例項傳入Thread構造器中,再讓執行緒就緒
  

public class Test implements Callable<String>{

    @Override
    public String call() throws Exception {
        String str 
= "test"; // TODO Auto-generated method stub return str; } public static void main(String[] args) { Test test = new Test(); FutureTask<String> futureTask = new FutureTask<>(test); Thread thread = new Thread(futureTask); thread.start(); } }

 

 
總結,通過整合Thread建立執行緒與實現Runnable介面與實現Callable介面建立執行緒的區別:

    1、相對而言,通過繼承Thread建立執行緒程式碼是最簡單的;
    2、如果我們的類繼承了Thread那就不能再去繼承其他類,因為java是單繼承,如果我們通過實現介面Runnable或者
        Callable來建立執行緒,我們的類還有去權力去繼承其他類;
    3、實現Runnable或者Callable介面,可以讓多個執行緒共享同一份資源
    4、當我們需要執行緒執行完畢之後有返回值|資訊返回,那麼需要實現Callable介面
       因為Callable介面中的call方法聲明瞭返回值
      
通過synchronized實現執行緒安全:
1、方法使用synchronized修飾,只有一個執行緒可以進入方法體中,當該方法體中的程式執行完畢之後,其他執行緒才可以進入;
2、需要同步的程式碼塊使用synchronized同步,提供同步監視器