JAVA多執行緒

2021-09-24 16:42:05 字數 1803 閱讀 6373

1)多執行緒概述

程序:

當前正在執行的程式,乙個應用程式在記憶體中的執行區域

執行緒:

程序中的乙個執行控制單元,執行路徑

乙個程序可以有乙個執行緒,也可以有多個執行緒

單執行緒:

安全性高,但是效率低

多執行緒:

安全性低,效率高

多執行緒案例:

360,迅雷等

2)多執行緒的實現方式

方式1

將類宣告為thread的子類,該子類重寫thread類的run方法,接下來可以分配並啟動該子類的例項。

thread:

string getname() 返回該執行緒的名稱

void setname(string name)改變該執行緒名稱,使之與引數name相同

cpu執行程式(執行緒)具有隨機性

主方法是單執行緒的

public class mythread extends thread	}}

public class threaddemo

}

方式2

建立執行緒的另一種方法是宣告實現runnable介面的類。該類然後實現run方法,然後可以分配該類的例項,再建立thread時作為乙個引數。

thread(runnable target)

static thread currentthread():返回當前執行緒物件

既然有了繼承thread為何還要有實現runnable?

因為繼承只能單一繼承

public class mythread2 implements runnable

@override

public void run() }}

public class threaddemo3

}

同步**塊解決多執行緒**現的問題

問題出現的原因:

有多個執行緒

有被多個執行緒共享的資料

多個執行緒併發的訪問共享的資料

synchronized:同步(鎖),可以修飾**塊和方法,被修飾的**塊和方法一旦被某個執行緒訪問,則直接鎖住,其他的執行緒將無法訪問。

同步**塊:

sychronized()

注意:鎖物件需要被所有的執行緒共享

同步:安全性高,效率低

非同步:效率高,安全性低

同步方法

/*

* 同步方法:使用關鍵字synchronized修飾的方法,一旦被乙個執行緒訪問則全部鎖死,其他執行緒則無法訪問。

* synchronized修飾方法,該方法就會變為乙個同步方法, 乙個安全的方法。

* 注意:

* 非靜態同步方法的鎖物件是this

* 靜態同步方法的鎖物件是當前類的位元組碼物件

*/public class ticketthread implements runnable

} private synchronized void method() catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+":"+ticket--);

} }}

3)執行緒的生命週期

生命週期:乙個物件的生老病死

新建-就緒-執行-死亡 等待

java多執行緒

在網上看到很有意思的問題,摘下來好好看下 在面試的時候被問了乙個多執行緒的問題 回來仔細思考了一下,多執行緒是否真的能提高了效率?我對多執行緒的理解就是 比如挖乙個隧道,有2種開工方法 1 只在山的一頭挖,直至挖到山的另一頭,從而打通隧道,這可以看成是單執行緒 2 在山的兩頭挖,同時開工,最後在山的...

Java 多執行緒

1。thread類和runnable介面 2。主線程 用thread的static thread currentthread 方法獲得 3。通過實現runnable介面建立執行緒 實現runnable介面的run方法。新執行緒在run 方法返回時結束。注意用這種方法建立程序時,在實現runnable...

JAVA 多執行緒

為hashmap的不正確使用所導致。hashmap在多執行緒環境下使用不安全。使用靜態hashmap作為聯絡人資料快取,key為手機號碼.private static maplxrdata new hashmap 多執行緒環境下不同步hashmap可能導致如下問題 1 多執行緒put操作後可能導致g...