您好,登錄后才能下訂單哦!
java中的多線程是怎么實現的?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
線程的概念
英文:Thread每個正在系統上運行的程序都是一個進程。每個進程包含一到多個線程。進程也可能是整個程序或者是部分程序的動態執行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨立執行。也可以把它理解為代碼運行的上下文。所以線程基本上是輕量級的進程,它負責在單個程序里執行多任務。通常由操作系統負責多個線程的調度和執行。
多線程的概念
多線程(英語:multithreading)是指從軟件或者硬件上實現多個線程并發執行的技術。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程,進而提升整體處理性能。具有這種能力的系統包括對稱多處理機、多核心處理器以及芯片級多處理(Chip-level multithreading)或同時多線程(Simultaneous multithreading)處理器。
如何實現java多線程
Java多線程是Java高級特性之一,通過多線程,我們可以實現多任務同時協同工作,在一定情況下提升程序效率,但是Java多線程仍要慎重使用,首先第一點,Java多線程需要較高的編碼技巧,一旦使用不當就會造成程序錯誤,線程間惡意競爭死鎖,導致程序卡死。其二,濫用多線程可能會造成某些關鍵參數紊亂,這時需要做好線程間的同步和鎖管理。其三,線程的切換是需要額外的代價的,也就是常說的“上下文切換”,如果使用不當,不僅不會提高效率,反而會造成效率的急劇降低。
1.繼承Thread來實現多線程
Java提供了一個超類Thread給我們來extends,一旦繼承了它,就可以通過override 其中的run方法,來實現多線程,具體代碼如下:
import java.io.*; public class MyThread extends Thread{ @Override public void run() { System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) throws IOException { Thread t1 = new MyThread(); Thread t2 = new MyThread(); t1.start(); t2.start(); } }
2.通過實現Runnable接口來實現
因為對于一些類來說,他們不能繼承Thread來實現多線程,因為Java規定同時只能繼承一個超類,但是卻可以同時實現多個接口,因此Runnable就更格外受歡迎。具體代碼如下:
import java.io.*; public class MyThread implements Runnable{ @Override public void run() { System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) throws IOException { Thread t1 = new Thread(new MyThread()); Thread t2 = new Thread(new MyThread()); t1.start(); t2.start(); } }
上面這種是直接定義了類來實現了Runnable方法,其實還可以變種為匿名內部類的方法來創建出一個Thread,具體如下:
import java.io.*; public class MyThread { public static void main(String[] args) throws IOException { Thread t1 = new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getId()); } }); Thread t2 = new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getId()); } }); t1.start(); t2.start(); } }
3.通過Callable來實現一個Thread
import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class MyThread implements Callable<Integer>{ public static void main(String[] args){ MyThread t1 = new MyThread(); FutureTask<Integer> future = new FutureTask<Integer>(t1); new Thread(future,"呵呵噠").start(); } @Override public Integer call() throws Exception { System.out.println(Thread.currentThread().getName()); return null; } }
關于java中的多線程是怎么實現的問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。