溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java中的多線程是怎么實現(xiàn)的

發(fā)布時間:2020-06-29 18:20:25 來源:億速云 閱讀:145 作者:元一 欄目:編程語言

java中的多線程是怎么實現(xiàn)的?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

線程的概念

英文:Thread每個正在系統(tǒng)上運行的程序都是一個進(jìn)程。每個進(jìn)程包含一到多個線程。進(jìn)程也可能是整個程序或者是部分程序的動態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨立執(zhí)行。也可以把它理解為代碼運行的上下文。所以線程基本上是輕量級的進(jìn)程,它負(fù)責(zé)在單個程序里執(zhí)行多任務(wù)。通常由操作系統(tǒng)負(fù)責(zé)多個線程的調(diào)度和執(zhí)行。

多線程的概念

多線程(英語:multithreading)是指從軟件或者硬件上實現(xiàn)多個線程并發(fā)執(zhí)行的技術(shù)。具有多線程能力的計算機因有硬件支持而能夠在同一時間執(zhí)行多于一個線程,進(jìn)而提升整體處理性能。具有這種能力的系統(tǒng)包括對稱多處理機、多核心處理器以及芯片級多處理(Chip-level multithreading)或同時多線程(Simultaneous multithreading)處理器。

如何實現(xiàn)java多線程    

Java多線程是Java高級特性之一,通過多線程,我們可以實現(xiàn)多任務(wù)同時協(xié)同工作,在一定情況下提升程序效率,但是Java多線程仍要慎重使用,首先第一點,Java多線程需要較高的編碼技巧,一旦使用不當(dāng)就會造成程序錯誤,線程間惡意競爭死鎖,導(dǎo)致程序卡死。其二,濫用多線程可能會造成某些關(guān)鍵參數(shù)紊亂,這時需要做好線程間的同步和鎖管理。其三,線程的切換是需要額外的代價的,也就是常說的“上下文切換”,如果使用不當(dāng),不僅不會提高效率,反而會造成效率的急劇降低。

1.繼承Thread來實現(xiàn)多線程

Java提供了一個超類Thread給我們來extends,一旦繼承了它,就可以通過override 其中的run方法,來實現(xiàn)多線程,具體代碼如下:

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.通過實現(xiàn)Runnable接口來實現(xiàn)

因為對于一些類來說,他們不能繼承Thread來實現(xiàn)多線程,因為Java規(guī)定同時只能繼承一個超類,但是卻可以同時實現(xiàn)多個接口,因此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();
    }
}

上面這種是直接定義了類來實現(xiàn)了Runnable方法,其實還可以變種為匿名內(nèi)部類的方法來創(chuàng)建出一個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來實現(xiàn)一個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;
    }
}

關(guān)于java中的多線程是怎么實現(xiàn)的問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI