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...