JAVA多線程實現Runnable方式

來源:互聯網
上載者:User

(一)

步驟:

 1.定義實現Runnable介面

 2.覆蓋Runnable介面中的run方法,將線程要啟動並執行代碼存放在run方法中。

3.通過Thread類建立線程對象。

4.將Runnable介面的子類對象作為實際參數傳遞給Thread類的建構函式。

  為什麼要講Runnable介面的子類對象傳遞給Thread的構造方法。因為自訂的方法的所屬的對象是Runnable介面的子類對象。

5.調用Thread類的start方法開啟線程並調用Runnable介面子類run方法。

(二)安全執行緒的共用代碼塊問題

  目的:程式是否存在安全問題,如果有,如何解決?

如何找問題:

1.明確哪些代碼是多線程運行代碼。

2.明確共用資料

3.明確多線程運行代碼中哪些語句是操作共用資料的。

class Bank{private int sum;public void add(int n){     sum+=n; System.out.println("sum="+sum);}} class Cus implements Runnable{   private Bank b=new Bank();   public void run(){     synchronized(b){    for(int x=0;x<3;x++) {b.add(100);  } }   }}public class BankDemo{    public static void main(String []args){    Cus c=new Cus();Thread t1=new Thread(c);Thread t2=new Thread(c);t1.start();t2.start();}}
或者第二種方式,將同步代碼synchronized放在修飾方法中。
class Bank{private int sum;public synchronized void add(int n){    Object obj=new Object();           sum+=n; try{      Thread.sleep(10); }catch(Exception e){   e.printStackTrace(); } System.out.println("sum="+sum);    }} class Cus implements Runnable{   private Bank b=new Bank();   public void run(){        for(int x=0;x<3;x++) {b.add(100);  }    }}public class BankDemo{    public static void main(String []args){    Cus c=new Cus();Thread t1=new Thread(c);Thread t2=new Thread(c);t1.start();t2.start();}}

總結:

1.在一個類中定義要處理的問題,方法。

2.在實現Runnable的類中重寫run方法中去調用已經定義的類中的要處理問題的方法。

在synchronized塊中接受要處理問題那個類的對象。

3.在main方法中去定義多個線程去執行。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.