在使用Java實(shí)際編程中,多線程可以說是無所不在,凡是需要并發(fā)執(zhí)行的都可以用到它,一個(gè)應(yīng)用程序中不用多線程將會(huì)是很糟糕的事情,所以 掌握線程以及它的控制操作是非常重要的 。
通過本篇文章今天帶大家一文掌握線程控制操作,感謝您的觀看。
:pencil2:
:pencil2:
并行:多個(gè)CPU核心同時(shí)工作,處理不同的任務(wù)。
并發(fā):多個(gè)任務(wù)交替使用 CPU 核心工作,以提高 CPU 利用率。
進(jìn)程:程序的第一次執(zhí)行。由操作系統(tǒng)創(chuàng)建并分配資源,執(zhí)行一個(gè)單獨(dú)的任務(wù)。
進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的獨(dú)立單位,每個(gè)進(jìn)程都有自己的內(nèi)存空間和系統(tǒng)資源。進(jìn)程內(nèi)所有線程共享堆存儲(chǔ)空間,保存程序中定義的對(duì)象和常量池。
Windows系統(tǒng)中,每個(gè)運(yùn)行的 Java 程序都是一個(gè)獨(dú)立的進(jìn)程。
線程:進(jìn)程內(nèi)的執(zhí)行單元,不分配單獨(dú)的資源,執(zhí)行一個(gè)單獨(dú)的子任務(wù)。
線程是進(jìn)程內(nèi)調(diào)度和分派的基本單位,共享進(jìn)程資源。每個(gè)線程有自己的獨(dú)立的棧存儲(chǔ)空間,保存線程執(zhí)行的方法以及基本類型的數(shù)據(jù)。
運(yùn)行的 Java 程序內(nèi)包含至少一個(gè)主線程 main ,用戶可以在 Java 程序中自定義并調(diào)用多個(gè)線程。 JVM 垃圾回收線程也是一個(gè)獨(dú)立的線程。
線程除創(chuàng)建狀態(tài) New 和結(jié)束狀態(tài) Terminate 外,主要有以下幾種運(yùn)行狀態(tài):
①運(yùn)行(Running) :CPU 正在執(zhí)行線程。
②就緒(Runnable) :線程一切就緒,等待 CPU 執(zhí)行。
運(yùn)行/就緒狀態(tài) 統(tǒng)稱為可運(yùn)行狀態(tài) Runnable。 Java 程序中,線程在 運(yùn)行/就緒狀態(tài) 之間的切換由 JVM 自動(dòng)調(diào)度,開發(fā)者無法獲知。線程之間的調(diào)度采用分優(yōu)先級(jí)多隊(duì)列時(shí)間的輪轉(zhuǎn)算法。進(jìn)程在執(zhí)行完 CPU 時(shí)間片切換到就緒狀態(tài)之前會(huì)先保存自己的狀態(tài),下次進(jìn)入運(yùn)行狀態(tài)時(shí)再重新加載。
③阻塞(Blocked) :線程因缺少其他資源,比如請(qǐng)求資源被上鎖而暫停執(zhí)行。在獲得資源后進(jìn)入就緒狀態(tài)。
④等待(Waitting) :線程接受了等待指令,釋放資源暫停執(zhí)行。在超時(shí)/接受喚醒指令后進(jìn)入就緒狀態(tài)。
Runnable 接口內(nèi)唯一聲明了 run 方法,由 Thread 類實(shí)現(xiàn)。開發(fā)者在 run 方法中定義運(yùn)行時(shí)線程將要執(zhí)行的功能,線程開啟后由Java虛擬機(jī)自動(dòng)調(diào)用并執(zhí)行。如果開發(fā)者主動(dòng)調(diào)用 run 方法,則只會(huì)當(dāng)作普通方法來執(zhí)行。
①繼承 Thread 類,重寫 run 方法。
public class MyThread extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}
②實(shí)現(xiàn) Runnable 接口,實(shí)現(xiàn) run 方法。推薦使用,避免了單繼承的局限性。
public class MyThread implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}
Thread 類定義了 start 方法。調(diào)用 start 方法后,系統(tǒng)會(huì)開啟一個(gè)新線程進(jìn)入就緒狀態(tài):由 JVM 會(huì)自動(dòng)對(duì)線程進(jìn)行調(diào)度,在運(yùn)行時(shí)調(diào)用并執(zhí)行線程的 run 方法。一個(gè)線程只能啟動(dòng)一次。
public class Main {
public static void main(String[] args) {
MyThread t1=new MyThread();
MyThread t2=new MyThread("ThreadName");
t1.start();
t2.start();
}
}
public class Main {
public static void main(String[] args) {
MyThread mythread=new MyThread();
Thread t1=new Thread(mythread); // 由系統(tǒng)指定默認(rèn)線程名 Thread-X
Thread t2=new Thread(mythread, "ThreadName"); // 開發(fā)者自定義線程名
t1.start();
t2.start();
}
}
通過匿名內(nèi)部類方式,我們可以實(shí)現(xiàn)同時(shí)定義和啟動(dòng)線程的簡(jiǎn)潔寫法。
public class Main {
public static void main(String[] args) {
Thread thread=new Thread(new Runnable(){
public void run(){
System.out.println(Thread.currentThread().getName());
}
}).start();
}
}
class Test {
public void method() {
System.out.println(Thread.currentThread().getName());
}
}
Thread 類定義了 yield 方法。當(dāng)前線程執(zhí)行到 Thread.yield() 方法,會(huì)停止運(yùn)行進(jìn)入就緒狀態(tài)。當(dāng)線程切換到就緒狀態(tài)后,什么時(shí)候被 JVM 調(diào)度回運(yùn)行狀態(tài)開發(fā)者無法控制。
public class ThreadDemo {
public static void main(String[] args) {
MyThread mythread=new MyThread();
Thread t1=new Thread(mythread);
Thread t2=new Thread(mythread);
t1.start();
t2.start();
}
static class MyThread implements Runnable {
@Override
public void run() {
int count=0;
for (int i=0; i < 10000; i++) {
Thread.yield(); // 切換到就緒狀態(tài)
count++;
System.out.println(count);
}
}
}
}
Thread 類定義了 sleep 方法。當(dāng)前線程執(zhí)行到 Thread.sleep(1000) 方法,會(huì)停止運(yùn)行進(jìn)入阻塞狀態(tài),但仍會(huì)保持對(duì)象鎖,其他線程不可訪問其資源。直到超時(shí)后才進(jìn)入就緒狀態(tài)。調(diào)用 sleep 方法需要捕獲或拋出 InterruptException 異常。
public class ThreadDemo {
public static void main(String[] args) {
MyThread mythread=new MyThread();
Thread t1=new Thread(mythread);
Thread t2=new Thread(mythread);
t1.start();
t2.start();
}
static class MyThread implements Runnable {
@Override
public void run() {
int count=0;
for (int i=0; i < 10000; i++) {
try{
Thread.sleep(1000); // 當(dāng)前線程暫停 1s
} catch(InterruptException e){
e.printStackTrace();
}
count++;
System.out.println(count);
}
}
}
}
當(dāng)前線程執(zhí)行 obj.wait() 方法,線程會(huì)停止運(yùn)行并釋放對(duì)象鎖 obj,其他線程可以訪問其資源。同時(shí)線程進(jìn)入 obj 對(duì)象的等待池,直到被 notify 方法喚醒進(jìn)入就緒狀態(tài)。調(diào)用 wait 方法需要捕獲或拋出 InterruptException 異常。
wait 方法允許計(jì)時(shí)等待。當(dāng)前線程執(zhí)行 obj.wait(1000) 方法,計(jì)時(shí)結(jié)束后線程會(huì)被自動(dòng)喚醒進(jìn)入就緒狀態(tài)。
當(dāng)前線程執(zhí)行 obj.notify() 方法,會(huì)隨機(jī)從 obj 對(duì)象等待池中選擇一個(gè)線程喚醒,使其進(jìn)入就緒狀態(tài)。但是 notify 方法不會(huì)釋放當(dāng)前進(jìn)程的對(duì)象鎖,如果該線程持有 obj 對(duì)象的鎖,當(dāng)前線程釋放鎖后被喚醒的其他線程才能被執(zhí)行。如果想被喚醒線程先執(zhí)行,notify 方法后添加 wait 方法釋放鎖。
當(dāng)前線程執(zhí)行 obj.notifyall() 方法,會(huì)將所有 obj 對(duì)象等待池中所有線程喚醒。
public class ThreadDemo {
public static void main(String[] args) {
MyThread t=new MyThread("t");
synchronized(t) { // 對(duì) t 設(shè)置對(duì)象鎖
try {
t.start();
System.out.println("1");
t.wait(); // 當(dāng)前線程釋放 t 鎖,進(jìn)入 t 對(duì)象等待池
System.out.println("4");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static class MyThread extends Thread {
@Override
public void run() {
synchronized (this) { // 對(duì) t 設(shè)置對(duì)象鎖
Thread.sleep(1000);
System.out.println("2");
this.notify(); // 隨機(jī)喚醒一個(gè) t 對(duì)象等待池中的線程
System.out.println("3");
}
}
}
}
調(diào)用 t.stop() 方法可以強(qiáng)制終止線程 t 運(yùn)行,但強(qiáng)制中斷線程可能會(huì)造成意想不到的問題,已不推薦使用。
目前主要采用設(shè)置線程中斷標(biāo)志的方式,向線程發(fā)送中止信號(hào)。由線程自行終止運(yùn)行:
t.interrupt()
t.isInterrupted()
t.interrupted()
public class ThreadDemo {
public static void main(String[] args) {
MyThread mythread=new MyThread();
Thread t=new Thread(mythread);
t.start();
try {
Thread.sleep(500);
} catch (InterruptedException e) {}
t.interrupt(); // 設(shè)置中斷標(biāo)志為 true
}
static class MyThread implements Runnable {
@Override
public void run() {
while (true) {
System.out.print("hello");
if(this.isInterrupted()){ // 查看中斷標(biāo)志,若為 true 結(jié)束循環(huán)
break;
}
}
}
}
}
原文鏈接:https://blog.csdn.net/m0_63947499/article/details/125416461
上一篇我簡(jiǎn)單對(duì)七彩虹隱星P16做了個(gè)開箱,這篇我來單獨(dú)對(duì)七彩虹隱星P16性能部分進(jìn)行測(cè)試。
走小米路線的新“星”游戲本?搭載RTX 4060的七彩虹隱星P16開箱
七彩虹隱星P16采用的是藍(lán)天Insyde H2O圖形化BIOS,版本號(hào)為1.07。這個(gè)Insyde BIOS曾經(jīng)也是主流BIOS之一,常見于神舟、惠普等品牌機(jī)上。界面比較簡(jiǎn)單,主要包含五個(gè)基本常用的功能選項(xiàng),如果想要解鎖高級(jí)模式,那就需要搭配H2OUVE軟件或是UEFI Shell等軟件。如果沒特別需求的話,建議不要輕易改動(dòng)BIOS參數(shù)設(shè)定或是刷第三方BIOS。
七彩虹隱星P16預(yù)裝的是Windows 11家庭中文版,版本號(hào)是22H2(22621.1413),系統(tǒng)沒有預(yù)裝Office。以下全部測(cè)試也是以該版本進(jìn)行。從下圖可以看到,七彩虹隱星P16分辨率就是2560*1600@165Hz。
英特爾酷睿i7-12650H是采用Intel 7工藝制程的第12代酷睿H系列移動(dòng)標(biāo)壓處理器,屬于中高端型號(hào)。英特爾酷睿i7-12650H采用了6顆性能核心+4顆能效核心(6P+4E))的大小核設(shè)計(jì),TDP為45瓦,自帶24MB三級(jí)緩存。
CPU方面,七彩虹隱星P16在CPU-Z軟件下的單線程性能得分為719.3,高與i7-10700的568和銳龍7-3700X的511,性能提升明顯;多線程分?jǐn)?shù)為5671.1,性能與i7-10700的5625接近,高于銳龍7-3700X的5433。
七彩虹隱星P16在CineBenchR 20下的跑分情況如下,CPU單核得分675cb,多核得分4629 cb;七彩虹隱星P16在CineBenchR 23下的跑分情況如下,CPU單核得分1752 pts,多核得分11729 pts。
七彩虹隱星P16在3DMark CPU Profile下單線程得分為954,最大線程下得分為6759。
七彩虹隱星P16在Geekbench6下的得分情況如下,單核得分為2227,多核得分為9900。
下面我們來看看七彩虹隱星P16內(nèi)置顯卡性能表現(xiàn)如何。
與PC端的驅(qū)動(dòng)軟件升級(jí)不同,筆記本端的驅(qū)動(dòng)升級(jí)要慢很多。我這里這臺(tái)隱星P16的驅(qū)動(dòng)版本為5月15日發(fā)布的531.87,隨著后續(xù)版本的升級(jí),對(duì)應(yīng)的軟件和游戲測(cè)試結(jié)果會(huì)比本文中的結(jié)果高屬于正常現(xiàn)象。
首先我這里先搭配3DMARK跑個(gè)分供部分玩家參考。
七彩虹隱星P16在PCIe功能測(cè)試下的帶寬為12.98GB/s。
七彩虹隱星P16在Fire Strike下的跑分為 22730 分,其中顯卡分?jǐn)?shù)為27355。
七彩虹隱星P16在Fire Strike Extreme下的跑分為 12000 分,其中顯卡分?jǐn)?shù)為12625。
七彩虹隱星P16在NVIDIA DLSS功能測(cè)試下的結(jié)果如下,DLSS關(guān)閉的下的幀數(shù)為12.02 fps,DLSS3開啟后則提升到了52.93fps,對(duì)比原來的12幀高出了4倍以上,可見DLSS 3的性能確實(shí)強(qiáng)悍。注意,DLSS3測(cè)試下的DLSS輸出分辨率為3840 ×2160,對(duì)應(yīng)的模式為性能模式。
七彩虹隱星P16在Port Royal下的分?jǐn)?shù)為5878,戰(zhàn)地5、APEX Legend、GTA V在1440P Ultra預(yù)設(shè)參數(shù)下的預(yù)估游戲性能分別為95+ fps、105+ fps和60+ fps,可以實(shí)現(xiàn)2K分辨率、高參數(shù)設(shè)置下暢玩游戲。
七彩虹隱星P16在AIDA64 GPGPU Benchmark下的性能表現(xiàn)如下,對(duì)應(yīng)的讀寫拷貝性能分別為12514 MB/s、12431 MB/s和829.94 GB/s。
七彩虹隱星P16在GeekBench6 GPU benchmark下的性能得分為97588。
接著來看看七彩虹隱星P16在PCMARK10下得分情況,PCMARK10下的總得分是7151,常用基本功能得分是10135,生產(chǎn)力得分是9199,數(shù)位內(nèi)容創(chuàng)作得分是10645。
七彩虹隱星P16在PCMARK10 extened下得分情況,PCMARK10下的總得分是7923,常用基本功能得分是10085,生產(chǎn)力得分是10047,數(shù)位內(nèi)容創(chuàng)作得分是10542,游戲得分為9971。
七彩虹隱星P16內(nèi)置一塊512G的七彩虹CN600 Pro,這是一款PCIe 3.0*4硬盤,支持NVMe 1.4協(xié)議。七彩虹CN600 PRO采用了是聯(lián)蕓科技MAP1202A主控以及國產(chǎn)長(zhǎng)江存儲(chǔ)128層TLC存儲(chǔ)顆粒,官方連續(xù)讀寫性能分別是3300MB/s和2600MB/s。
在讀寫速度方面,從搭配CrystalDsikMark實(shí)際測(cè)試來看,七彩虹CN600 Pro讀寫性能分別達(dá)到了3541MB/s和2706MB/s,沒有存在虛標(biāo)的問題。對(duì)于追求大容量和讀寫性能的用戶,可以直接升級(jí)到2塊2T PCIe 4.0*4的m.2 NVMe SSD。
由于七彩虹隱星P16游戲本預(yù)裝單條DDR5 4800MHz內(nèi)存條,在性能方面的優(yōu)勢(shì)不太明顯,后續(xù)有必要手動(dòng)升級(jí)到更高頻率的雙通道DDR5內(nèi)存條。
下面我來談?wù)勂卟屎珉[星P16游戲本搭配游戲?qū)崪y(cè)表現(xiàn)如何,我這里選擇了《古墓麗影:暗影》、《Far Cry 6》、《極限競(jìng)速:地平線5》、《賽博朋克2077》這幾款內(nèi)置Benchmark的游戲。
《古墓麗影:暗影》參數(shù)這里選擇了DX12、2560*1600分辨率、預(yù)設(shè)畫面質(zhì)量最高,NVIDIA RTX DLSS對(duì)應(yīng)選項(xiàng)為平衡模式,七彩虹隱星P16游戲本在《古墓麗影:暗影》下的平均幀率為118fps。
《Far Cry 6》在預(yù)設(shè)畫面質(zhì)量高、2560*1600分辨率下,七彩虹隱星P16游戲本在《Far Cry 6》下的平均幀率達(dá)到了88,可以更加流暢的運(yùn)行游戲。
《極限競(jìng)速:地平線5》在視覺預(yù)設(shè)超高+2560*1440分辨率+光線追蹤質(zhì)量高下,七彩虹隱星P16游戲本在《極限競(jìng)速:地平線5》下的平均幀率為100fps,整體表現(xiàn)相對(duì)平穩(wěn)。
最后是支持英偉達(dá)RTX DLSS 3技術(shù)以及Reflex的《Cyberpunk 2077》,預(yù)設(shè)光線追蹤Ultra、2560*1600分辨率+DLSS質(zhì)量 Auto模式下,七彩虹隱星P16游戲本在《Cyberpunk 2077》下的平均幀率為45.04。
如果你修改為超級(jí)性能模式的話,那么平均幀率會(huì)提升到70.69fps。
在壓力測(cè)試這塊,我這里選擇了Furmark@2560*1440分辨率對(duì)七彩虹隱星P16游戲本進(jìn)行壓力測(cè)試,不搭配AIDA64進(jìn)行雙烤壓力測(cè)試,室溫30度、無空調(diào)。初始測(cè)試時(shí)七彩虹隱星P16游戲本的顯卡功耗可以達(dá)到141.4W。
烤機(jī)一段時(shí)間后,GPU溫度提升到了84.8攝氏度,對(duì)應(yīng)的功耗也基本穩(wěn)定在了109W。如果在空調(diào)環(huán)境下進(jìn)行測(cè)試,這個(gè)GPU溫度會(huì)更低一些,功耗也會(huì)有對(duì)應(yīng)提升。就室溫以及這個(gè)測(cè)試結(jié)果而言,七彩虹隱星P16游戲本在散熱性能方面的表現(xiàn)已經(jīng)很不錯(cuò)。
七彩虹隱星P16游戲本整機(jī)在這個(gè)測(cè)試過程中,初期功率可以達(dá)到190瓦,之后功耗會(huì)在165瓦~190瓦之間波動(dòng)。
最后聊聊七彩虹這個(gè)官方驅(qū)動(dòng)控制中心,這類軟件可以說是品牌類筆記本標(biāo)準(zhǔn)必備的軟件,可以用來調(diào)節(jié)性能模式、修改燈光、修改按鍵、錄制宏等等。
總的來說,當(dāng)下酷睿i7-12650H+ RTX 4060 LAPTOP GPU的硬件配置已經(jīng)成為6000元價(jià)位的流行標(biāo)配,此類筆記本最大的賣點(diǎn)是支持DDR5內(nèi)存以及支持DLSS 3技術(shù)的英偉達(dá)RTX 40系Laptop GPU,尤其是開啟DLSS后可以在不犧牲畫質(zhì)的前提下大幅提升幀率,從而提升流暢的游戲體驗(yàn)。
作為七彩虹推出的全新系列電競(jìng)筆記本,七彩虹隱星P16在外觀設(shè)計(jì)方面采用了辨識(shí)度很高的圖案和配色設(shè)計(jì),硬件配置可以滿足日常大部分游戲、設(shè)計(jì)需求,搭配GPU直連設(shè)計(jì)以及散熱設(shè)計(jì)方面的優(yōu)化升級(jí),可以充分發(fā)揮CPU和GPU的性能,滿足玩對(duì)高性能體驗(yàn)以及模式下的散熱需求。此外筆記本拆裝也比較方便,日后內(nèi)存和SSD的擴(kuò)容升級(jí)也比較簡(jiǎn)單。
最后想要提醒各位的是,如果你想要給七彩虹隱星P16搭配多功能Type-C口便攜顯示器使用或是搭配多功能Type-C口桌面顯示器使用,務(wù)必確認(rèn)顯示器的Type-C口支持DP傳輸協(xié)議,此類顯示器一般都在在Type-C下方標(biāo)識(shí)DP logo,否則的話會(huì)無法正常實(shí)現(xiàn)畫面輸出功能。
以上就是此次簡(jiǎn)單的體驗(yàn)分享,感謝各位觀看。