當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]synchronized簡(jiǎn)介 synchronized 是Java語(yǔ)言的一個(gè)關(guān)鍵字,它本身的意思為同步,是用來(lái)保證線程安全的,可用來(lái)給對(duì)象和方法或者代碼塊加鎖,當(dāng)它鎖定一個(gè)方法或者一個(gè)代碼塊的時(shí)候,同一時(shí)刻最多只有一個(gè)線程執(zhí)行這段代碼。 synchronized一句話來(lái)解釋其作用就


synchronized簡(jiǎn)介

synchronizedJava語(yǔ)言的一個(gè)關(guān)鍵字,它本身的意思為同步,是用來(lái)保證線程安全的,可用來(lái)給對(duì)象和方法或者代碼塊加鎖,當(dāng)它鎖定一個(gè)方法或者一個(gè)代碼塊的時(shí)候,同一時(shí)刻最多只有一個(gè)線程執(zhí)行這段代碼。

synchronized一句話來(lái)解釋其作用就是:能夠保證同一時(shí)刻最多只有一個(gè)線程執(zhí)行該段代碼,以達(dá)到并發(fā)安全的效果。synchronized就猶如一把鎖,當(dāng)一個(gè)線程獲取到該鎖,別的線程只能等待其執(zhí)行完才能執(zhí)行。

synchronized可以說(shuō)是Java中元老級(jí)的關(guān)鍵字了,也是面試的高頻的問(wèn)點(diǎn),在jdk1.6之前它是一把重量級(jí)鎖,性能不被大家看好,在次之后對(duì)它做了很多優(yōu)化,性能也大大提升。

那么synchronized的實(shí)現(xiàn)的底層原理是什么,jdk1.6之后又對(duì)它做了哪些優(yōu)化呢?接下來(lái)我們一步一步的分析。

synchronized的特性

面試官最想要的synchronized,你值得擁有

synchronized能夠保證在多線程的情況下線程安全,直接可以它的特性進(jìn)行總結(jié)原因,synchronized有以下四個(gè)特性

  1. 原子性:保證被 synchronized修飾的一個(gè)或者多個(gè)操作,在執(zhí)行的過(guò)程中不會(huì)被任何的因素打斷,即所謂的 原子操作,直到鎖被釋放。
  2. 可見性:保證持有鎖的當(dāng)前線程在釋放鎖之前,對(duì)共享變量的修改會(huì)刷新到主存中,并對(duì)其它線程可見。
  3. 有序性:保證多線程時(shí)刻中只有一個(gè)線程執(zhí)行,線程執(zhí)行的順序都是有序的。
  4. 可重入性:保證在多線程中,有其他的線程試圖競(jìng)爭(zhēng)持有鎖的臨界資源時(shí),其它的線程會(huì)處于等待狀態(tài),而當(dāng)前持有鎖的線程可以重復(fù)的申請(qǐng)自己持有鎖的臨界資源。

上面的也是粗略的進(jìn)行概括,接下來(lái)就一步一步的進(jìn)行深入的分析synchronized的這四個(gè)特性的底層原理。

原子性

上面介紹了原子性就是一個(gè)或者多個(gè)操作,在執(zhí)行的過(guò)程中不會(huì)被任何的因素打斷,這里的任何因素打斷具體一點(diǎn)主要是指cpu的線程調(diào)度

在Java語(yǔ)言中對(duì)基本數(shù)據(jù)類型讀取和賦值才是原子操作,這些操作在執(zhí)行的過(guò)程不會(huì)被中斷。而像a++或者a+=1類似的操作,都并非是原子性操作。

因?yàn)檫@些操作底層執(zhí)行的流程分為這三步:讀取值、計(jì)算值賦值。才算完成上面的操作,在多線程的時(shí)候就會(huì)存在線程安全的問(wèn)題,產(chǎn)生臟數(shù)據(jù),導(dǎo)致最后的結(jié)果并非預(yù)期的結(jié)果。

在面試的過(guò)程中也會(huì)有很多面試官常常拿volatilesynchronized做比較,在原子性方面區(qū)別就是volatile沒有辦法保證原子性,而synchronized可以實(shí)現(xiàn)原子性。

這里簡(jiǎn)單的只對(duì)volatile做一個(gè)簡(jiǎn)介,volatile的具體作用主要有兩個(gè):保證可見性禁止指令重排,這里畫了一個(gè)圖給大家,可以參考:

面試官最想要的synchronized,你值得擁有

具體的volatile為什么沒辦法保證原子操作,我之前寫過(guò)一篇關(guān)于volatile詳細(xì)的文章,可以參考這一篇文章[]。

那么synchronized的底層又是怎么實(shí)現(xiàn)原子性的呢?這里又要從synchronized的字節(jié)碼說(shuō)起,在idea中寫了一段簡(jiǎn)單的代碼如下所示:

public class TestSynchronized implements Runnable {

@Override
public void run() {
synchronized (this) {
System.out.println("同步代碼塊");
}
}

public static void main(String[] args) {
TestSynchronized sync = new TestSynchronized();
Thread t = new Thread(sync);
t.start();
}
}

代碼很簡(jiǎn)單,通過(guò)字節(jié)碼進(jìn)行分析,執(zhí)行的字節(jié)碼如下圖所示,在字節(jié)碼中可以看出在執(zhí)行代碼塊中的代碼之前有一個(gè)monitorenter,后面的是離開monitorexit

面試官最想要的synchronized,你值得擁有

不難猜測(cè)執(zhí)行同步代碼塊中的代碼時(shí),首先要獲取對(duì)象鎖,對(duì)應(yīng)使用monitorenter指令 ,在執(zhí)行完代碼塊之后,就要釋放鎖,所對(duì)應(yīng)的指令就是monitorexit。

在這里又會(huì)有一個(gè)面試考點(diǎn)就是:什么會(huì)出現(xiàn)兩次的monitorexit呢? 這是因?yàn)橐粋€(gè)線程對(duì)一個(gè)對(duì)象上鎖了,后續(xù)就一定要解鎖,第二個(gè)monitorexit是為了保證在線程異常時(shí),也能正常解鎖,避免造成死鎖。

可見性

synchronized實(shí)現(xiàn)可見性就是在解鎖之前,必須將工作內(nèi)存中的數(shù)據(jù)同步到主內(nèi)存,其它線程操作該變量時(shí)每次都可以看到被修改后的值。

說(shuō)到工作內(nèi)存和主內(nèi)存這個(gè)要從JMM說(shuō)起,主存是放共享變量的地方,而工作內(nèi)存線程私有的,存放的是主存的變量的副本,線程不會(huì)對(duì)主存的變量直接操作。這里畫了一張圖給大家理解:

面試官最想要的synchronized,你值得擁有

具體講解JMM的文章我之前寫過(guò)一篇詳細(xì)的文章,這里只做上面的概述,詳細(xì)了解JMM的可以看這一篇[]。

有序性

synchronized在實(shí)現(xiàn)有序性時(shí),多線程并發(fā)訪問(wèn)只有一個(gè)線程執(zhí)行,從而保證線程執(zhí)行的順序都是有序的。

synchronized為了實(shí)現(xiàn)有序性,通過(guò)阻塞其它線程的方式,來(lái)達(dá)到線程的有序執(zhí)行,接下來(lái)看一個(gè)簡(jiǎn)單的代碼:

public class TestSynchronized implements Runnable {
Object o= new Object();
public static void main(String[] args) throws InterruptedException {
TestSynchronized sync = new TestSynchronized ();
Thread t1 = new Thread(sync);
Thread t2 = new Thread(sync);
t1.start();
t2.start();
}
@Override
public void run() {
synchronized (o) {
try {
System.out.println(Thread.currentThread().getName() + "線程開始執(zhí)行");
Thread.sleep(5000);
System.out.println(Thread.currentThread().getName() + "線程等待5秒后執(zhí)行完畢");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

這個(gè)毋庸置疑,當(dāng)你加了synchronized代碼塊的時(shí)候,這兩個(gè)線程執(zhí)行必須是有序的,同一個(gè)線程前后的輸出一定會(huì)在一起,執(zhí)行的結(jié)果如圖所示:

面試官最想要的synchronized,你值得擁有

假如注釋掉synchronized的代碼塊,兩個(gè)線程的執(zhí)行就不再是有序的執(zhí)行,就會(huì)出現(xiàn)如圖所示的情況:

面試官最想要的synchronized,你值得擁有

可重入性

synchronized的可重入性就是當(dāng)一個(gè)線程已經(jīng)持有鎖對(duì)象的臨界資源,當(dāng)該線程再次請(qǐng)求對(duì)象的臨界資源,可以請(qǐng)求成功,這種情況屬于重入鎖。

實(shí)現(xiàn)的底層原理就是synchronized底層維護(hù)一個(gè)計(jì)數(shù)器,當(dāng)線程獲取該鎖時(shí),計(jì)數(shù)器+1,再次獲取鎖時(shí)繼續(xù)+1,釋放鎖時(shí),計(jì)數(shù)器-1,當(dāng)計(jì)數(shù)器值為0時(shí),表明該鎖未被任何線程所持有,其它線程可以競(jìng)爭(zhēng)獲取鎖。

synchronized基本用法

前面詳細(xì)的介紹了synchronized的基本特性,接下來(lái)詳細(xì)的介紹synchronized的基本用法,我們基本都知道大部分是時(shí)候只會(huì)用到同步方法上,但是它的用法有下面三種:

  1. 同步普通方法:在方法上添加synchronized關(guān)鍵字。
  2. 同步靜態(tài)方法:在方法上添加synchronized關(guān)鍵字,并且方法被static修飾。
  3. 同步代碼塊:執(zhí)行的代碼操作被synchronized修飾。
  • 鎖定this實(shí)例或者實(shí)例對(duì)象
  • 鎖定類字節(jié)碼

在同步方法中這個(gè)相信大家都是知道,代碼如下圖所示:

private synchronized void syncMethod() {
// 邏輯代碼
}

這里有一個(gè)問(wèn)題就是對(duì)于synchronized的鎖無(wú)非就是兩種,對(duì)于同步方法中的鎖對(duì)象又是什么呢? ,這里畫了一張圖給大家,如下如圖所示:

面試官最想要的synchronized,你值得擁有

在同步普通方法中鎖對(duì)象就是this,也就是當(dāng)前對(duì)象,哪個(gè)對(duì)象調(diào)用的同步方法,鎖對(duì)象就是就是它。

當(dāng)然同步普通方法只能作用在單例上,若不是單例,同步方法就會(huì)失效,原因很簡(jiǎn)單,多例中鎖對(duì)象不一樣,沒辦法生效。

同步靜態(tài)方法中的鎖對(duì)象是當(dāng)前類的class對(duì)象,這個(gè)相信大家都能想到。

在同步代碼塊中,可以有很多的玩法,因?yàn)殒i對(duì)象是任意的,由程序員自己操作指定,主要這幾種方式獲得鎖對(duì)象:thisObject、this.getClass()className.getClass()。

具體用哪種就要看你的具體的業(yè)務(wù)場(chǎng)景了,這里只是做了總結(jié)和歸納。

synchronized的優(yōu)化

JVM的書籍中介紹到,synchronizedjdk6之前一直使用的是重量級(jí)鎖,在jdk6之后便對(duì)其進(jìn)行了優(yōu)化,新增了偏向鎖、輕量級(jí)鎖(自旋鎖),并通過(guò)鎖消除、鎖粗化自旋鎖自適應(yīng)自旋等方法使用于各種場(chǎng)景,大大提升了synchronized的性能。

下面就來(lái)詳細(xì)的介紹synchronized被優(yōu)化的過(guò)程以及原理,對(duì)synchronized優(yōu)化的實(shí)現(xiàn)的具體的原理圖如下所示:

面試官最想要的synchronized,你值得擁有

在synchronized優(yōu)化的最重要的就是鎖升級(jí)的優(yōu)化過(guò)程,也是大廠面試的必問(wèn)的鎖知識(shí)點(diǎn),接下來(lái)我們就詳細(xì)的了解這個(gè)過(guò)程。

鎖升級(jí)

在講解鎖升級(jí)的過(guò)程,先了解對(duì)象的在內(nèi)存中的布局情況,為什么呢?因?yàn)殒i的信息是存儲(chǔ)在對(duì)象的markword中,只有了解了對(duì)象的布局,對(duì)深入的了解鎖升級(jí)會(huì)更有幫助。

在我們創(chuàng)建一個(gè)對(duì)象后,大部分時(shí)候,對(duì)象都是分配在堆中,因?yàn)檫€有可能對(duì)象在棧上分配,所以這里用大部分情況。

對(duì)于一個(gè)對(duì)象創(chuàng)建完之后,在內(nèi)存中的布局情況,我之前也寫過(guò)一篇文章,詳細(xì)可以參考這一篇[],這里做一個(gè)大概的回顧,一個(gè)對(duì)象在內(nèi)存中的布局圖如下所示。

面試官最想要的synchronized,你值得擁有

對(duì)象在內(nèi)存布局中主要分為以下三個(gè)部分:對(duì)象頭(markword、class pointer)、示例數(shù)據(jù)(instance data)、對(duì)齊(可有可無(wú))

其中對(duì)象頭中,若是對(duì)象為數(shù)組則還包含數(shù)據(jù)的長(zhǎng)度,其中markword中主要包含信息有:GC年齡信息鎖對(duì)象信息、hashCode信息。

class pointer是類型指針,指向當(dāng)前對(duì)象class文件,實(shí)例數(shù)據(jù)若是一個(gè)對(duì)象有屬性private int n=1,這是n=1即使存儲(chǔ)在示例數(shù)據(jù)中。

最后的填充可有可無(wú),這個(gè)取決于對(duì)象的大小,所示對(duì)象大小能被8字節(jié)整除,則該部分沒有,不能被整除,就會(huì)填充對(duì)象大小到能夠被8字節(jié)整除。

在對(duì)象的內(nèi)存布局中,最值得我們關(guān)注的就是markword,因?yàn)?code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;">markword是存儲(chǔ)鎖信息的,接下來(lái)的實(shí)驗(yàn)中,就是要觀察markword包含的位里面的大小的變化。

要在實(shí)際中觀察到對(duì)象的內(nèi)存布局情況,可以借助JOL依賴庫(kù),全程是JAVA Objct Layout,即是Java對(duì)象布局,只需要在你的maven工程里面引入如下maven坐標(biāo):

<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.9</version>
</dependency>

然后創(chuàng)建一個(gè)SpringBoot項(xiàng)目,加入上面Maven依賴,接著創(chuàng)建Java類JaveObjectLayout,代碼如下:

public class JaveObjectLayout {

public static void main(String[] args) {
Object o = new Object();
String s = ClassLayout.parseInstance(o).toPrintable();
System.out.println(s);
}

}

執(zhí)行代碼后輸出的結(jié)果如下圖所示:

面試官最想要的synchronized,你值得擁有

有人問(wèn)這是啥?不慌,且聽我慢慢道來(lái),這個(gè)就是Java在內(nèi)存中的布局?jǐn)?shù)據(jù),前八個(gè)字節(jié)表示的是markword,其中OFFSET表示起始位,SIZE表示偏移位。

比如第一行0 4,表示第0個(gè)字節(jié)開始算4個(gè)字節(jié),然后第二行4 4表示第4個(gè)字節(jié)開始算4個(gè)字節(jié),這樣就一共8個(gè)字節(jié),表示完整的markword信息。

其中后面的VAlUE數(shù)據(jù)表示的是對(duì)應(yīng)的這4個(gè)字節(jié)上的具體位的數(shù)據(jù),1字節(jié)=8位,這個(gè)也剛好對(duì)應(yīng)。

在能看懂這個(gè)之前必須要了解各種鎖對(duì)應(yīng)的位數(shù)上的是0還是1,才能夠知道上面輸出的表示是什么信息,看一張各種鎖表示的信息圖:

面試官最想要的synchronized,你值得擁有

其中無(wú)鎖狀態(tài)位001,偏向鎖為101,輕量級(jí)鎖為00,而重量級(jí)鎖為10,最后11表示GC信息。這個(gè)怎么對(duì)應(yīng)呢?我們?cè)賮?lái)看上面的那種圖:

面試官最想要的synchronized,你值得擁有

從代碼中可以看出,是沒有加鎖的,所有對(duì)應(yīng)的最低三位為001為無(wú)鎖狀態(tài),當(dāng)代碼改成如下圖所示:

Object o = new Object();
synchronized (o) {
String s = ClassLayout.parseInstance(o).toPrintable();
System.out.println(s);
}

再次輸出,這時(shí)候便表示輕量級(jí)鎖,前四個(gè)字節(jié)的數(shù)據(jù)明顯變大,后面字節(jié)的數(shù)據(jù)都沒有變化,說(shuō)明鎖信息是存儲(chǔ)在markword中的,所謂的加鎖,就是在對(duì)象的markword中儲(chǔ)存鎖信息(包括線程的ThreadID),并且對(duì)象的鎖狀態(tài)由0改為了1,表示該對(duì)象已經(jīng)被哪個(gè)線程所持有。

面試官最想要的synchronized,你值得擁有

接下來(lái)我們來(lái)聊聊詳細(xì)的鎖升級(jí)的過(guò)程,當(dāng)初始化完對(duì)象后,對(duì)象處于無(wú)鎖狀態(tài),在只有一個(gè)線程第一次使用該對(duì)象,不存在鎖競(jìng)爭(zhēng)時(shí),我們便會(huì)認(rèn)為該線程偏向于它。

偏向鎖的實(shí)質(zhì)就是將線程的ThreadID存儲(chǔ)于markword中,表明該線程偏向于它。

若是某一時(shí)刻又來(lái)了線程二、線程三也想競(jìng)爭(zhēng)這把鎖,此時(shí)是輕度的競(jìng)爭(zhēng),便升級(jí)為輕量級(jí)鎖,于是這三個(gè)線程就開始競(jìng)爭(zhēng)了,他們就會(huì)去判斷鎖是否由釋放,若是沒有釋放,沒有獲得鎖的線程就會(huì)自旋,這就是自旋鎖。

在自旋的過(guò)程,也會(huì)嘗試的去獲取鎖,直到獲取鎖成功。在jdk1.6之后又出現(xiàn)了自適應(yīng)自旋,就是jdk根據(jù)運(yùn)行的情況和每個(gè)線程運(yùn)行的情況決定要不要升級(jí)。

自適應(yīng)自旋是對(duì)自旋鎖優(yōu)化方式的進(jìn)一步優(yōu)化,它的自旋的次數(shù)不再固定,其自旋的次數(shù)由前一次在同一個(gè)鎖上的自旋時(shí)間及鎖的擁有者的狀態(tài)來(lái)決定,這就解決了自旋鎖帶來(lái)的缺點(diǎn)。

這個(gè)競(jìng)爭(zhēng)的過(guò)程的實(shí)質(zhì)就是看誰(shuí)能把自己的ThreadID貼在對(duì)象的markword中,而這個(gè)過(guò)程就是CAS操作,原子操作。

倘若此時(shí)又來(lái)了線程四、線程5.....線程n,都想獲取該鎖,競(jìng)爭(zhēng)越來(lái)越激烈了,此時(shí)就會(huì)升級(jí)為重量級(jí)鎖。

所謂的重量級(jí)鎖,為什么叫做重量級(jí)呢?因?yàn)橹亓考?jí)鎖要通過(guò)操作系統(tǒng),由用戶態(tài)切換到內(nèi)核態(tài)的過(guò)程,這個(gè)切換的過(guò)程是非常消耗資源的,并且經(jīng)過(guò)系統(tǒng)調(diào)用。

那么為啥重量級(jí)鎖那么消耗資源?還要它,要它有何用?是這樣的,假如沒有重量級(jí)鎖,不管有多少個(gè)線程都是自旋,那么當(dāng)線程是大了,等待的線程永遠(yuǎn)在自旋。

自旋是要消耗cpu資源的,這樣cpu就撐不住了,反而性能會(huì)大大下降,在經(jīng)過(guò)反復(fù)的測(cè)試后,肯定是有一個(gè)臨界值,當(dāng)超過(guò)這個(gè)臨界值時(shí),反而使用重量級(jí)鎖性能更加高效。

因?yàn)?strong>重量級(jí)鎖不需要消耗cpu的資源,都把等待的線程放在了一個(gè)等待的隊(duì)列中,需要的時(shí)候在喚醒他們。

jdk1.6之前當(dāng)線程的自選次數(shù)超過(guò)10次或者等待的自旋的線程數(shù)超過(guò)了CPU核數(shù)的二分之一,就會(huì)升級(jí)為重量級(jí)鎖。

當(dāng)然也有情況就是偏向鎖一開始就重度競(jìng)爭(zhēng),這是就直接升級(jí)為重量級(jí)鎖,這個(gè)在互聯(lián)網(wǎng)項(xiàng)目中也是很常見的。

經(jīng)過(guò)上面的詳細(xì)講解于是就出現(xiàn)了下面的鎖升級(jí)圖,在不同的條件就會(huì)升級(jí)為不同的鎖:

面試官最想要的synchronized,你值得擁有

鎖消除、鎖粗化

鎖消除是另一種鎖的優(yōu)化措施,在編譯期間,會(huì)對(duì)上下文進(jìn)行掃描,去除掉不可能存在競(jìng)爭(zhēng)的鎖,這樣就不必執(zhí)行沒有必要的上鎖和解鎖操作消耗性能。

鎖粗化就是擴(kuò)大所得范圍,避免反復(fù)執(zhí)行加鎖和釋放鎖,避免不必要的性能消耗。

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

面試官最想要的synchronized,你值得擁有

長(zhǎng)按訂閱更多精彩▼

面試官最想要的synchronized,你值得擁有

如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉