溫馨提示×

溫馨提示×

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

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

Java多線程的實現(xiàn)方式

發(fā)布時間:2020-06-19 17:03:45 來源:億速云 閱讀:164 作者:元一 欄目:編程語言

Java的多線程是一個同時執(zhí)行多個線程的過程。

線程是一個輕量級的子進(jìn)程,是最小的處理單元。多線程和多進(jìn)程都用于實現(xiàn)多任務(wù)處理。

但是,我們使用多線程而不是多進(jìn)程,因為線程使用共享內(nèi)存區(qū)域,它們不分配單獨的內(nèi)存區(qū)域以節(jié)省內(nèi)存,而且線程之間上下文切換比進(jìn)程花費的時間更少。

用一個東西之前,總得了解一下它的優(yōu)點,這樣才有動力看下去,這里我們先看一下多線程的優(yōu)點。

Java多線程的優(yōu)點

它不會阻塞用戶,因為線程是獨立的,你可以同時執(zhí)行多個操作,舉個栗子,你需要一個延時,等待三秒鐘再進(jìn)行接下來的操作,如果你使用單線程,它就真的等了你三秒,這三秒,啥都不干,啥都得放一邊,就等。。。這明顯是不可接受的。

你可以同時執(zhí)行多個操作,節(jié)省時間。這里面又牽扯到CPU密集型和IO密集型的問題,可以看這篇文章:關(guān)于多線程的CPU密集型和IO密集型這件事

線程是獨立的,死掉一個,不影響另一個。

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

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

package com.dingtao.test;
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();
    }
}

通過實現(xiàn)Runnable接口來實現(xiàn)

因為對于一些類來說,他們不能繼承Thread來實現(xiàn)多線程,因為Java規(guī)定同時只能繼承一個超類,但是卻可以同時實現(xiàn)多個接口,因此Runnable就更格外受歡迎。具體代碼如下:

package com.dingtao.test;
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();
    }
}

通過Callable來實現(xiàn)一個Thread

具體代碼如下:

package com.dingtao.test;
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如何實現(xiàn)多線程的詳細(xì)內(nèi)容,更多請關(guān)注億速云其它相關(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