當前位置 主頁 > 網站技術 > 代碼類 > 最大化 縮小

    Java并發編程之常用的多線程實現方式分析

    欄目:代碼類 時間:2020-02-07 12:12

    本文實例講述了Java并發編程之常用的多線程實現方式。分享給大家供大家參考,具體如下:

    概述

    常用的多線程實現方式有2種:

    1. 繼承Thread類

    2. 實現Runnable接口

    之所以說是常用的,是因為通過還可以通過JUC(java.util.concurrent)包中的線程池來實現多線程。關于線程池的內容,我們以后會詳細介紹;現在,先對的Thread和Runnable進行了解。

    Thread簡介

    Thread 是一個類。Thread本身就實現了Runnable接口。它的聲明如下:

    public class Thread implements Runnable {}
    
    

    Thread的作用是實現多線程。

    ThreadTest.java 源碼

    class MyThread extends Thread{ 
     private int ticket=10; 
     public void run(){
      for(int i=0;i<20;i++){ 
       if(this.ticket>0){
        System.out.println(this.getName()+" 賣票:ticket"+this.ticket--);
       }
      }
     } 
    };
    public class ThreadTest { 
     public static void main(String[] args) { 
      // 啟動3個線程t1,t2,t3;每個線程各賣10張票!
      MyThread t1=new MyThread();
      MyThread t2=new MyThread();
      MyThread t3=new MyThread();
      t1.start();
      t2.start();
      t3.start();
     } 
    }
    
    

    運行結果

    Thread-0 賣票:ticket10
    Thread-1 賣票:ticket10
    Thread-2 賣票:ticket10
    Thread-1 賣票:ticket9
    Thread-0 賣票:ticket9
    Thread-1 賣票:ticket8
    Thread-2 賣票:ticket9
    Thread-1 賣票:ticket7
    Thread-0 賣票:ticket8
    Thread-1 賣票:ticket6
    Thread-2 賣票:ticket8
    Thread-1 賣票:ticket5
    Thread-0 賣票:ticket7
    Thread-1 賣票:ticket4
    Thread-2 賣票:ticket7
    Thread-1 賣票:ticket3
    Thread-0 賣票:ticket6
    Thread-1 賣票:ticket2
    Thread-2 賣票:ticket6
    Thread-2 賣票:ticket5
    Thread-2 賣票:ticket4
    Thread-1 賣票:ticket1
    Thread-0 賣票:ticket5
    Thread-2 賣票:ticket3
    Thread-0 賣票:ticket4
    Thread-2 賣票:ticket2
    Thread-0 賣票:ticket3
    Thread-2 賣票:ticket1
    Thread-0 賣票:ticket2
    Thread-0 賣票:ticket1

    Runnable簡介

    Runnable 是一個函數式接口,該接口中只包含了一個run()方法。它的定義如下:

    @FunctionalInterface
    public interface Runnable {
     public abstract void run();
    }
    
    

    Runnable的作用,實現多線程。我們可以定義一個類A實現Runnable接口;然后,通過new Thread(new A())等方式新建線程。

    RunnableTest.java 源碼

    class MyThread implements Runnable{ 
     private int ticket=10; 
     public void run(){
      for(int i=0;i<20;i++){ 
       if(this.ticket>0){
        System.out.println(Thread.currentThread().getName()+" 賣票:ticket"+this.ticket--);
       }
      }
     } 
    }; 
    public class RunnableTest { 
     public static void main(String[] args) { 
      MyThread mt=new MyThread();
      // 啟動3個線程t1,t2,t3(它們共用一個Runnable對象),這3個線程一共賣10張票!
      Thread t1=new Thread(mt);
      Thread t2=new Thread(mt);
      Thread t3=new Thread(mt);
      t1.start();
      t2.start();
      t3.start();
     } 
    }
    
    

    運行結果

    Thread-0 賣票:ticket10
    Thread-2 賣票:ticket8
    Thread-1 賣票:ticket9

教我怎样炒股