多線程實現的兩種方式:
繼承Thread類
實現Runnable接口
這兩種方式都必須重寫run()方法。
當多線程對同一個對象操作時,必須實現Runnable接口,而不能繼承Thread類。因為繼承Thread類實現多線程時,操作的是不同的對象。

1 Runnable r=new RunnableImpl(); 2 Thread t1=new Thread(r); 3 Thread t2=new Thread(r); 4 t1.start(); 5 t2.start();
兩個線程傳同一個對象,相當於這兩個線程對同一個對象進行操作。
注意:多線程對同一個對象操作的時候一定要加鎖synchronized,同時傳一個鎖旗標。
加鎖時,原則上要雙重檢查。
鎖旗標對同一個對象有用,如果是兩個對象,則這兩個對象分別有自己的鎖旗標,此時鎖旗標就會失效。
synchronized不僅可以加在代碼塊上,還可以加在方法上。當加在方法上時,鎖旗標是this,誰調用這個方法,this就是誰,只要是同一個對象就行。
synchronized提高了安全性,降低了性能。
若有錯誤之處,歡迎指正。謝謝!