最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java線程的創(chuàng)建及休眠

 更新時間:2021年06月11日 08:43:21   作者:MercuryG  
今天帶大家學(xué)習(xí)的是Java的相關(guān)知識,文章圍繞著Java線程的創(chuàng)建及休眠展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下

一、進(jìn)程vs線程

  • 1、進(jìn)程是系統(tǒng)分配資源的最小單位;線程是系統(tǒng)調(diào)度的最小單位
  • 2、一個進(jìn)程中至少要包含一個線程
  • 3、線程必須要依附于繼承,線程是進(jìn)程實質(zhì)工作的一個最小單位

二、線程的創(chuàng)建方式

繼承Thread類 實現(xiàn)線程的創(chuàng)建(2種寫法)

1種寫法

public class ThreadDemo03 {

    static  class MyThread extends Thread{
        @Override
        public void run(){
            System.out.println("線程名稱:" +
                    Thread.currentThread().getName());
        }
    }

    public static void main(String[] args) {
        // 創(chuàng)建了線程
        Thread t1 = new MyThread();
        // 啟動線程
        t1.start();
        System.out.println("當(dāng)前線程的名稱(主線程):" +
                Thread.currentThread().getName());
    }
}

2種寫法

public class ThreadDemo04 {
    public static void main(String[] args) {
        
        Thread thread = new Thread(){
            @Override
            public void run() {
                System.out.println("線程名:" +
                        Thread.currentThread().getName());
            }
        };
        thread.start();
        
    }
}

繼承Thread類的創(chuàng)建方式的缺點:在Java語言設(shè)計當(dāng)中只能實現(xiàn)單繼承,如果繼承了Thread類,就不能繼承其他類了,所以這種創(chuàng)建方式在開發(fā)中使用。

三、實現(xiàn)Runnable接口的方式(3種)

在Java中不能實現(xiàn)多繼承,但是可以實現(xiàn)多接口

1種方法

public class ThreadDemo05 {
    static class MyRunnable implements Runnable{
        @Override
        public void run() {
            System.out.println("線程名:" +
                    Thread.currentThread().getName());
        }
    }

    public static void main(String[] args) {
        // 1、新建Runnable類
        MyRunnable runnable = new MyRunnable();

        // 2、新建Thread
        Thread thread = new Thread(runnable);

        // 3、啟動線程
        thread.start();
    }
}

2種方法

public class ThreadDemo06 {
    public static void main(String[] args) {

        // 匿名內(nèi)部類的方式實現(xiàn)線程

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("線程名:" +
                        Thread.currentThread().getName());
            }
        });
        thread.start();
    }
}

3種方法

/**
 * 使用拉姆達(dá)表達(dá)式的方式創(chuàng)建
 * **/
public class ThreadDemo07 {
    public static void main(String[] args) {
        Thread thread  = new Thread(() -> {
            System.out.println("線程名: "+ 
                    Thread.currentThread().getName());
        });
        thread.start();
    }
}

四、實現(xiàn)Callable接口的方式(1種)

為了拿到執(zhí)行完線程后可以得到返回值的方法

package Thread;

import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * 創(chuàng)建并得到線程執(zhí)行的結(jié)果
 * 實現(xiàn)Callable 接口  + Future容器 的方式
 * */


public class ThreadDemo08 {

    static class MyCallable implements Callable<Integer >{ // 想要返回的是Integer類型

        @Override
        public Integer call() throws Exception {

            // 生成一個隨機(jī)數(shù)
            int num = new Random().nextInt(10);
            System.out.println("子線程:" +
                    Thread.currentThread().getName() +
                    "隨機(jī)數(shù):" + num);
            return num;
        }
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 1、創(chuàng)建一個Callable
        MyCallable myCallable = new MyCallable();

        // 2、創(chuàng)建一個FutureTask 對象來接受返回值
        FutureTask<Integer> futureTask =
                new FutureTask<>(myCallable);
        // 3、創(chuàng)建Thread
        Thread thread = new Thread(futureTask);

        // 啟動線程
        thread.start();

        // 得到線程執(zhí)行結(jié)果
        int result = futureTask.get();
        System.out.println(String.format("線程名:%s,數(shù)字:%d",
                Thread.currentThread().getName(), result));
    }
}

五、線程的休眠

  • 1、Thread.sleep()
  • 2、TimeUnit.SECONDS.sleep(1)休眠一秒鐘
  • 其中可選的有DAYS表示天,HOURS表示小時
  • 3、Thread.sleep(TimeUnit.SECONDS.toMillis(1))

練習(xí):使用連個線程來打印“AABBCCDD”,一個線程只能打印"ABCD"

package Thread;

public class ThreadDemo09 {
    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                String data = "ABCD";
                for (char item:data.toCharArray()) {
                    System.out.print(item);
                    try {
                        // 休眠一段時間
                        Thread.sleep(1);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };

        Thread t1 = new Thread(runnable);
        Thread t2 = new Thread(runnable);
        t1.start();
        t2.start();
    }

}

六、線程優(yōu)先級

默認(rèn)優(yōu)先級為5

最小優(yōu)先級為1

最大優(yōu)先級為10

優(yōu)先級越大那么它的執(zhí)行權(quán)重越高

理論上優(yōu)先級越高,執(zhí)行權(quán)限也就越大,但是CPU的調(diào)度實很復(fù)雜的,所以不會嚴(yán)格按照優(yōu)先級的排序去執(zhí)行,但總體還是優(yōu)先級越高,執(zhí)行權(quán)重越高

七、守護(hù)線程

守護(hù)線程使用場景:Java垃圾回收器、TCP的健康檢測

守護(hù)線程需要注意的事項:

  •  1、守護(hù)線程必須設(shè)置在Thread.start()之前,如果設(shè)置守護(hù)線程再開始線程之后,那么程序就會報錯,并且設(shè)置的守護(hù)線程值不能生效
  • 2、在守護(hù)線程t1內(nèi)部創(chuàng)建一個新的線程t2,此時t2默認(rèn)情況下也是守護(hù)線程

到此這篇關(guān)于詳解Java線程的創(chuàng)建及休眠的文章就介紹到這了,更多相關(guān)Java線程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java之jpa入門教程講解

    Java之jpa入門教程講解

    這篇文章主要介紹了Java之jpa入門教程講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java多線程三種主要實現(xiàn)方式解析

    Java多線程三種主要實現(xiàn)方式解析

    這篇文章主要介紹了Java多線程三種主要實現(xiàn)方式解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Spring實例化bean的方式代碼詳解

    Spring實例化bean的方式代碼詳解

    這篇文章主要介紹了Spring實例化bean的方式代碼詳解,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • IDEA之翻譯器的使用Translation

    IDEA之翻譯器的使用Translation

    這篇文章主要介紹了IDEA之翻譯器的使用Translation,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot+MinIO實現(xiàn)對象存儲的示例詳解

    SpringBoot+MinIO實現(xiàn)對象存儲的示例詳解

    MinIO?是一個基于Apache?License?v2.0開源協(xié)議的對象存儲服務(wù),它是一個非常輕量的服務(wù),可以很簡單的和其他應(yīng)用的結(jié)合,所以下面我們就來看看SpringBoot如何整合MinIO實現(xiàn)對象存儲吧
    2023-10-10
  • 使用maven-assembly-plugin如何打包多模塊項目

    使用maven-assembly-plugin如何打包多模塊項目

    這篇文章主要介紹了使用maven-assembly-plugin如何打包多模塊項目,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • idea神級插件及如何安裝Bito插件【Bito-ChatGPT】

    idea神級插件及如何安裝Bito插件【Bito-ChatGPT】

    這篇文章主要介紹了介紹一款idea神級插件【Bito-ChatGPT】,Bito插件的強(qiáng)大之處在于它可以幫助開發(fā)人員更快地提交代碼,同時還提供了一些有用的功能,如自動補(bǔ)全提交信息、快速查看歷史記錄等,需要的朋友可以參考下
    2023-04-04
  • java實現(xiàn)XML增加元素操作簡單示例

    java實現(xiàn)XML增加元素操作簡單示例

    這篇文章主要介紹了java實現(xiàn)XML增加元素操作,結(jié)合簡單實例形式分析了java針對xml格式數(shù)據(jù)的讀取、遍歷、創(chuàng)建等操作技巧,需要的朋友可以參考下
    2017-02-02
  • linux環(huán)境下java程序打包成簡單的hello world輸出jar包示例

    linux環(huán)境下java程序打包成簡單的hello world輸出jar包示例

    這篇文章主要介紹了linux環(huán)境下java程序打包成簡單的hello world輸出jar包,結(jié)合簡單hello world輸出程序示例分析了Linux環(huán)境下的java可執(zhí)行jar包文件的生成相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Java字符流和字節(jié)流對文件操作的區(qū)別

    Java字符流和字節(jié)流對文件操作的區(qū)別

    本篇文章主要介紹了Java的IO流分為字符流(Reader,Writer)和字節(jié)流(InputStream,OutputStream),字節(jié)流顧名思義字節(jié)流就是將文件的內(nèi)容讀取到字節(jié)數(shù)組,對初學(xué)者很有用,有需要的朋友可以了解一下。
    2016-10-10

最新評論

永登县| 武鸣县| 铜梁县| 固安县| 南靖县| 电白县| 麻江县| 阆中市| 大足县| 织金县| 原平市| 深州市| 屏东市| 黔西| 临西县| 藁城市| 库伦旗| 葵青区| 德江县| 齐河县| 青冈县| 台中市| 红桥区| 通海县| 喜德县| 永兴县| 舒兰市| 大竹县| 辽源市| 镇巴县| 宣恩县| 法库县| 罗江县| 原平市| 巩义市| 游戏| 喜德县| 新民市| 屏山县| 宕昌县| 延吉市|