" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java線程基本使用之如何實(shí)現(xiàn)Runnable接口

 更新時(shí)間:2024年01月16日 10:05:01   作者:兮動(dòng)人  
這篇文章主要介紹了Java線程基本使用之如何實(shí)現(xiàn)Runnable接口問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1. 實(shí)現(xiàn) Runnable 接口

說(shuō)明

  • java是單繼承的,在某些情況下一個(gè)類(lèi)可能已經(jīng)繼承了某個(gè)父類(lèi),這時(shí)在用繼承Thread類(lèi)方法來(lái)創(chuàng)建線程顯然不可能了。
  • java設(shè)計(jì)者們提供了另外一個(gè)方式創(chuàng)建線程,就是通過(guò)實(shí)現(xiàn)Runnable接口來(lái)創(chuàng)建線程

應(yīng)用案例

  • 請(qǐng)編寫(xiě)程序,該程序可以每隔1秒。在控制臺(tái)輸出“你好,兮動(dòng)人”,當(dāng)輸出10次后,自動(dòng)退出。
  • 使用實(shí)現(xiàn)Runnable接口的方式實(shí)現(xiàn)。
public class Thread02 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        //dog.start(); //這里不能調(diào)用 start 方法
        //創(chuàng)建了 Thread 對(duì)象,把 dog 對(duì)象(實(shí)現(xiàn)了 Runnable ),放入了 Thread
        Thread thread = new Thread(dog);
        thread.start();
    }
}



class Dog implements Runnable { //通過(guò)實(shí)現(xiàn)Runnable接口來(lái)實(shí)現(xiàn)

    int count =  0;

    @Override
    public void run() { //普通方法
        while (true) {
            System.out.println("你好,兮動(dòng)人-" + (++count) + Thread.currentThread().getName());

            //休眠1秒
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (count == 10) {
                break;
            }
        }
    }
}

這里底層使用了設(shè)計(jì)模式【代理模式】=> 代碼模擬實(shí)現(xiàn)Runnable接口 開(kāi)發(fā)線程的機(jī)制。

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

        Tiger tiger = new Tiger();
        ThreadProxy threadProxy = new ThreadProxy(tiger);
        threadProxy.start();
    }
}

class Animal {}

class Tiger extends Animal implements Runnable {

    @Override
    public void run() {
        System.out.println("老虎...");
    }
}

//線程代理類(lèi),模擬了一個(gè)極簡(jiǎn)的Thread類(lèi)
class ThreadProxy implements Runnable { //可以把 Proxy 類(lèi)當(dāng)做 Thread

    private Runnable target = null; // 屬性類(lèi)型 是 Runnable

    @Override
    public void run() {
        if (target != null) {
            target.run();//動(dòng)態(tài)綁定(運(yùn)行類(lèi)型是Tiger)
        }
    }

    public ThreadProxy(Runnable target) {
        this.target = target;
    }

    public void start() {
        start0();//這個(gè)方法是真正實(shí)現(xiàn)多線程的方法
    }

    public void start0() {
        run();
    }
}

2. 線程使用應(yīng)用案例–多線程執(zhí)行

請(qǐng)編寫(xiě)一個(gè)程序,創(chuàng)建兩個(gè)線程,一個(gè)線程每隔1秒輸出“hello,world”,輸出10次,退出,另一個(gè)線程每隔1秒輸出“hi”,輸出5次退出。

public class Thread03 {
    public static void main(String[] args) {
        T1 t1 = new T1();
        T2 t2 = new T2();
        Thread thread1 = new Thread(t1);
        thread1.start();
        Thread thread2 = new Thread(t2);
        thread2.start();
    }
}

class T1 implements Runnable {

    int count = 0;

    @Override
    public void run() {
        while (true) {
            System.out.println("hello world" + (++count));
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (count == 10) {
                break;
            }
        }
    }
}

class T2 implements Runnable {

    int count = 0;

    @Override
    public void run() {
        while (true) {
            System.out.println("hi" + (++count));
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (count == 5) {
                break;
            }
        }
    }
}

3. 如何理解線程

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybatis plus 開(kāi)啟sql日志打印的方法小結(jié)

    mybatis plus 開(kāi)啟sql日志打印的方法小結(jié)

    Mybatis-Plus(簡(jiǎn)稱(chēng)MP)是一個(gè) Mybatis 的增強(qiáng)工具,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生。本文重點(diǎn)給大家介紹mybatis plus 開(kāi)啟sql日志打印的方法小結(jié),感興趣的朋友一起看看吧
    2021-09-09
  • 分析mybatis運(yùn)行原理

    分析mybatis運(yùn)行原理

    Mybatis是一個(gè)優(yōu)秀的持久層框架,它對(duì)JDBC操作數(shù)據(jù)庫(kù)的過(guò)程進(jìn)行封裝,使開(kāi)發(fā)者只需要關(guān)注sql本身。我們?cè)瓉?lái)使用JDBC操作數(shù)據(jù)庫(kù),需要手動(dòng)的寫(xiě)代碼去注冊(cè)驅(qū)動(dòng)、獲取connection、獲取statement等等,現(xiàn)在Mybaits幫助我們把這些事情做了,我們只需要關(guān)注我們的業(yè)務(wù)sql即可
    2021-06-06
  • java繪制五子棋棋盤(pán)

    java繪制五子棋棋盤(pán)

    這篇文章主要為大家詳細(xì)介紹了java繪制五子棋棋盤(pán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • Spring Boot配置元數(shù)據(jù)方法教程

    Spring Boot配置元數(shù)據(jù)方法教程

    這篇文章主要介紹了Spring Boot配置元數(shù)據(jù)方法教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • java中對(duì)象和JSON格式的轉(zhuǎn)換方法代碼

    java中對(duì)象和JSON格式的轉(zhuǎn)換方法代碼

    JSON格式可以輕松地以面向?qū)ο蟮姆绞睫D(zhuǎn)換為Java對(duì)象,下面這篇文章主要給大家介紹了關(guān)于java中對(duì)象和JSON格式的轉(zhuǎn)換方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 圖文精講java常見(jiàn)分布式事務(wù)理論與解決方案

    圖文精講java常見(jiàn)分布式事務(wù)理論與解決方案

    對(duì)于分布式系統(tǒng),最簡(jiǎn)單的理解就是一堆機(jī)器對(duì)外提供服務(wù),相比單體服務(wù),它可以承受更高的負(fù)載,但是分布式系統(tǒng)也帶了一系列問(wèn)題,今天帶大家搞懂和分布式相關(guān)的常見(jiàn)理論和解決方案
    2021-11-11
  • Java兩種方式實(shí)現(xiàn)動(dòng)態(tài)代理

    Java兩種方式實(shí)現(xiàn)動(dòng)態(tài)代理

    Java 在 java.lang.reflect 包中有自己的代理支持,該類(lèi)(Proxy.java)用于動(dòng)態(tài)生成代理類(lèi),只需傳入目標(biāo)接口、目標(biāo)接口的類(lèi)加載器以及 InvocationHandler 便可為目標(biāo)接口生成代理類(lèi)及代理對(duì)象。我們稱(chēng)這個(gè)Java技術(shù)為:動(dòng)態(tài)代理
    2020-10-10
  • JsonProperty及JSONField注解的使用說(shuō)明

    JsonProperty及JSONField注解的使用說(shuō)明

    文章介紹了兩個(gè)常用的Java庫(kù)注解:Jackson的@JsonProperty和Fastjson的@JSONField,它們用于控制Java對(duì)象與JSON數(shù)據(jù)之間的序列化和反序列化,文章詳細(xì)說(shuō)明了這兩個(gè)注解的常見(jiàn)屬性及其使用場(chǎng)景,包括指定屬性名、控制字段可見(jiàn)性、設(shè)置默認(rèn)值和標(biāo)記字段的必需性
    2024-12-12
  • Spring實(shí)現(xiàn)默認(rèn)標(biāo)簽解析流程

    Spring實(shí)現(xiàn)默認(rèn)標(biāo)簽解析流程

    這篇文章主要為大家詳細(xì)介紹了Spring實(shí)現(xiàn)默認(rèn)標(biāo)簽解析流程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 布隆過(guò)濾器的原理以及java 簡(jiǎn)單實(shí)現(xiàn)

    布隆過(guò)濾器的原理以及java 簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要介紹了布隆過(guò)濾器的原理以及java 簡(jiǎn)單實(shí)現(xiàn),幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論