本篇文章為大家帶來了關於java的相關知識,其中主要整理了線程的相關問題,線程(thread)是一個程式內部的一條執行路徑,我們所熟悉的main方法其實就是一條單獨執行路徑,若程序中只有一條執行路徑那麼這個程序就是單線程程序,下面一起來看一下,希望對大家有幫助。
推薦學習:《java影片教學》
執行緒(thread)是一個程式內部的一條執行路徑,我們所熟悉的main方法其實就是一條單獨執行路徑,若程式中只有一條執行路徑那麼這個程式就是單線程程式;既然有單線程,那麼也相對的會有多線程,字面意思可以理解為“相對單執行緒從軟硬體上多條執行流程的技術”,多執行緒的好處是提高CPU的利用率。在多執行緒程式中,一個執行緒必須等待的時候,CPU可以運行其它的執行緒而不是等待,大大提高程式的效率。
多執行緒的建立
方式一:繼承Thread類別
方式一建立過程:
定義一個子類別MyThread繼承線程類別java.lang.Thread,重寫run()方法;
建立MyThread類別的物件;
-
呼叫線程物件的start()方法啟動執行緒(啟動後仍執行run()方法);
public class ThreadDemo01 { public static void main(String[] args) { MyThread myThread1 = new MyThread(); myThread1.start(); for (int i = 0; i
#在上述程式碼中共有兩個執行緒在執行,分別是main方法的主執行緒和執行緒物件mythread呼叫start()啟動的子執行緒。不過輸出結果為什麼會不唯一的呢?原因是因為兩個執行緒在執行過程中會發生CPU的搶佔,誰先搶到誰將優先執行。
那我們為什麼不直接使用執行緒物件呼叫run()方法呢?若直接呼叫run()則只是普通的呼叫方法,即單線程,而start()方法則是用來啟動的子線程的,由此才能出現多線程。
方式一優缺點:
- 優點:編碼簡單;
- #缺點:執行緒類別已經繼承Thread,無法繼承其他類,不利於擴充;
方式二: 實作Runnable介面
方式二建立流程:
1、定義一個執行緒任務類別MyRunnable實作Runnable接口,重寫run()方法;
2、建立MyRunnable物件;
3、把MyRunnable任務物件交給Thread處理;
4、呼叫執行緒物件的start()方法啟動執行緒;
Thread建構器 | 方法 |
#public Thread (String name) | 可以為目前執行緒指定名稱 |
public Thread (Runnable target) | #封裝Runnable物件成為執行緒物件 |
封裝Runnable物件成為執行緒對象,並指定執行緒名稱 |
方法名称 | 说明 |
public FutureTask(Callable call) | 把Callable对象封装成FutureTask对象 |
public V get() throws Exception | 获取线程执行call方法返回的结果 |
public class ThreadDemo03 { public static void main(String[] args) throws Exception { MyCallable myCallable = new MyCallable(); FutureTask<string> futureTask = new FutureTask(myCallable); Thread thread = new Thread(futureTask); thread.start(); int sum= 0; for (int i = 0; i { @Override public String call(){ int sum=0; for (int i = 0; i <p>方式三优缺点:</p> <p>优点:</p> <p>线程任务类只是实现接口,可以继续继承类和实现接口,扩展性强;</p> <p>可以在线程执行完毕后去获取 线程执行的结果;</p> <p>缺点:</p> <p>编码复杂一点;</p> <h2 id="总结">总结 </h2> <table border="1" cellpadding="1" cellspacing="1" style="width:500px;"><tbody> <tr class="firstRow"> <td>方式</td> <td>优点</td> <td>缺点</td> </tr> <tr> <td>继承Thread类</td> <td>编程比较简单,可以直接使用Thread类中的方法</td> <td>扩展性较差,不能再继承其他的类,不能返回线程执行的结果</td> </tr> <tr> <td>实现Runnable接口</td> <td>扩展性强,实现该接口的同时还可以继承其他的类</td> <td>编程相对复杂,不能返回线程执行的结果</td> </tr> <tr> <td>实现Callable接口</td> <td>扩展性强,实现该接口的同时还可以继承其他的类,可以得到线程的执行结果</td> <td>编程相对复杂</td> </tr> </tbody></table> <h2 id="常用方法">常用方法 </h2> <h2 id="Thread获取和设置线程名称">Thread获取和设置线程名称 </h2> <table border="1" cellpadding="1" cellspacing="1" style="width:500px;"><tbody> <tr class="firstRow"> <td>方法名称</td> <td>说明</td> </tr> <tr> <td>String getName()</td> <td>获取当前线程的名称,默认线程名称是Thread-索引</td> </tr> <tr> <td>void setName(String name)</td> <td><p>将此线程更改为指定的名称,通过构造器也可以设置线程名称</p></td> </tr> </tbody></table> <p> 简单地通过一段代码让大家能够清晰地了解这个代码该如何使用:</p> <pre class="brush:php;toolbar:false">public class ThreadDemo04 { public static void main(String[] args) throws Exception { thread thread1 = new thread(); thread1.setName("1号子线程"); thread1.start(); thread thread2 = new thread(); thread2.setName("2号子线程"); thread2.start(); } } class thread extends Thread { @Override public void run() { for (int i = 0; i <h2 id="Thread类的线程休眠方法">Thread类的线程休眠方法 </h2>
方法名称 | 说明 |
public static void sleep(long time) | 让当前线程休眠指定的时间后再继续执行,单位为毫秒 |
public class ThreadDemo05 { public static void main(String[] args) throws Exception { for (int i = 0; i <p>推荐学习:《<a href="https://www.php.cn/course/list/36.html" target="_blank">java视频教程</a>》</p>
以上是一文搞懂java中的執行緒如何理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

WebStorm Mac版
好用的JavaScript開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能