多線程-線程的創建
執行緒的建立方式
總結多執行緒的建立方式,多執行緒的實作一共四種方法,接下來將詳談一下建立的方式
#1、繼承Thread類,而後覆寫run()方法
2、實作Runnable接口,而後覆寫run()方法
3、實作callable接口,而後覆寫call< v>方法
4、線程池(後面專門說,因為較複雜)
注意:無論使用哪種方式創建線程,啟動線程一律使用Thread類別提供的start ()方法。
1.繼承Thread類別覆寫run方法
#class MyThread extends Thread { private String title; private int ticket = 20; public MyThread(String title) { this.title = title; } public void run() { //放每个线程的子任务 while (ticket > 0) { System.out.println("当前线程为"+title+",还剩下"+ticket--+"票"); } } } public class ThreadTest { public static void main(String[] args) { MyThread myThread1 = new MyThread("黄牛A"); MyThread myThread2 = new MyThread("黄牛B"); MyThread myThread3 = new MyThread("黄牛C"); myThread1.start(); myThread2.start(); myThread3.start(); } }
2.實作Runnable介面覆寫run方法
class MyRunnable implements Runnable{ @Override public void run() { for(int i =0;i <10;i++){ System.out.println(Thread.currentThread().getName()+"、i="+i); } } } public class RunnableTest { public static void main(String[] args) { Runnable runnable =new MyRunnable(); //向上转型 new Thread(runnable,"线程A").start(); //设置线程名字 new Thread(runnable).start(); //没有设置线程名字,则是系统默认从 Thread-(0,1,2...) Thread thread1 = new Thread(runnable); thread1.setName("线程B"); //调用setName()设置名字 thread1.start(); } }
這裡呢順便介紹了線程名字的創建3種:
(1)在括號後直接加名字
(2)調用setName()設置名字
(3)不設定名字,則是系統預設從Thread-(0,1,2....)
3.實作Callable介面覆寫call
class MyCallable implements Callable<String>{ private int ticket =20; @Override public String call() throws Exception { while(ticket > 0){ System.out.println(Thread.currentThread().getName()+"还剩下"+ticket--+"票"); } return "票卖完了,再见"; } } public class CallableTest { public static void main(String[] args) throws ExecutionException, InterruptedException { //产生Callable对象 MyCallable myCallable = new MyCallable(); //产生FutureTask对象 FutureTask futureTask = new FutureTask(myCallable); Thread thread = new Thread(futureTask); thread.start(); System.out.println(futureTask.get()); //接收Callable对象的返回值 } }
1.先產生Callable物件
2.產生FutureTask物件
3.建立Thread傳入FutureTask物件
4. 接收Callable介面的回傳值是Future中get()方法
三個建立執行緒的方式比較
#1 .繼承Thread類別有單一繼承局限,相對而言實作Runnable介面更加靈活,並且Thread類別本身也實作了Runnable介面輔助真實執行緒類別
2.實作Runnable介面可以更好的實作程式共享的概念
3.Callable介面就是需要有回傳值時用到
以上內容若有明顯錯誤請指出,不勝感激。謝謝!
更多相關內容請上PHP中文網:JAVA影片教學
#以上是多線程-線程的創建的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

8核是指CPU有8顆物理核心,16線程是指CPU最多同時可以有16個執行緒處理任務。核心數和執行緒數是電腦CPU的重要效能指標,CPU的核心數越高處理速度就越高;執行緒數越多越有利於同時運行多個程序,因為執行緒數等同於在某個瞬間CPU能同時並行處理的任務數。多執行緒可最大限度地實現寬發射、亂序的超標量處理,提高處理器運算元件的使用率,緩和由於資料相關或Cache未命中帶來的存取記憶體延遲。

為避免執行緒飢餓,可以使用公平鎖確保資源公平分配,或設定執行緒優先權。為解決優先權反轉,可使用優先權繼承,即暫時提高持有資源執行緒的優先權;或使用鎖的提升,即提升需要資源執行緒的優先權。

C++中執行緒終止和取消機制包括:執行緒終止:std::thread::join()阻塞目前執行緒直到目標執行緒完成執行;std::thread::detach()從執行緒管理中分離目標執行緒。執行緒取消:std::thread::request_termination()請求目標執行緒終止執行;std::thread::get_id()取得目標執行緒ID,可與std::terminate()一起使用,立即終止目標執行緒。實戰中,request_termination()允許執行緒決定終止時機,join()確保在主線

區別:1、一個執行緒可以多個協程,一個行程也可以單獨擁有多個協程;2、執行緒是同步機制,而協程則是異步;3、協程能保留上一次呼叫時的狀態,執行緒不行;4、執行緒是搶佔式,協程是非搶佔式的;5、執行緒是被分割的CPU資源,協程是組織好的程式碼流程,協程需要執行緒來承載運作。

「執行緒」是程式運行時指令流的最小單位。進程是指一個具有一定獨立功能的程序,而執行緒是進程的一部分,描述指令流執行狀態;執行緒是進程中的指令執行流的最小單位,是CPU調度的基本單位。一個執行緒是一個任務(一個程式段)的一次執行過程;執行緒不佔有記憶體空間,它包括在一個行程的記憶體空間中。在同一個行程內,多個執行緒共享行程的資源;一個行程至少有一個執行緒。

Microsoft顯然不會將其強大的人工智慧支援的Copilot工具保留為新應用程式的獨家功能。現在,該公司剛剛宣布計劃在Windows上的Outlook經典應用程式中引入Copilot。正如其365路線圖網站上發布的那樣,預覽將於明年<>月開始,直到<>月在當前頻道的桌面上在全球範圍內推出。 Copilot是一種生產力工具,它使用大型語言模型(LLM)來幫助使用者完成編寫電子郵件、匯總文件和翻譯語言等任務。它的主要功能之一是它能夠總結電子郵件

在進行JavaFX應用程式開發的過程中,我們常常會遇到JavaFX執行緒卡頓錯誤。這種錯誤的嚴重程度不同,可能會對程式的穩定性和效能產生不利的影響。為了確保程式的正常運行,我們需要了解JavaFX執行緒卡頓錯誤的原因和解決方法,以及如何預防這種錯誤的發生。一、JavaFX線程卡頓錯誤的原因JavaFX是一個多線程的UI應用程式框架,它允許程式在後台執行緒執行長時

Go語言中的進程和執行緒:進程:獨立運行的程式實例,擁有自己的資源和位址空間。執行緒:進程內的執行單元,共享行程資源和位址空間。特點:進程:開銷大,隔離性好,獨立調度。執行緒:開銷小,共享資源,內部調度。實戰案例:進程:隔離長時間運行的任務。線程:並發處理大量資料。
