" />

亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

說明

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

應用案例

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



class Dog implements Runnable { //通過實現(xiàn)Runnable接口來實現(xiàn)

    int count =  0;

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

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

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

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("老虎...");
    }
}

//線程代理類,模擬了一個極簡的Thread類
class ThreadProxy implements Runnable { //可以把 Proxy 類當做 Thread

    private Runnable target = null; // 屬性類型 是 Runnable

    @Override
    public void run() {
        if (target != null) {
            target.run();//動態(tài)綁定(運行類型是Tiger)
        }
    }

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

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

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

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

請編寫一個程序,創(chuàng)建兩個線程,一個線程每隔1秒輸出“hello,world”,輸出10次,退出,另一個線程每隔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é)

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

相關文章

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

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

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

    分析mybatis運行原理

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

    java繪制五子棋棋盤

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

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

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

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

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

    圖文精講java常見分布式事務理論與解決方案

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

    Java兩種方式實現(xiàn)動態(tài)代理

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

    JsonProperty及JSONField注解的使用說明

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

    Spring實現(xiàn)默認標簽解析流程

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

    布隆過濾器的原理以及java 簡單實現(xiàn)

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

最新評論