java Thread 多線程

來源:互聯網
上載者:User

Thread 建立線程的兩種方法:

1、定義類繼承Thread類,覆寫類中的run方法,調用類對象的start方法,start方法啟動線程,調用run方法。Thread類用於描述線程;該類定義一個功能run,用於儲存線程要啟動並執行代碼。

2、定義類實現Runnable介面,覆蓋Runnable介面中的方法,通過Thread類建立線程對象,將Runnable介面的子類對象作為實際參數傳遞給Thread類的建構函式,調用Thread類的start方法開啟線程,線程會調用Runnable介面子類中的run方法;

實現介面Runnable的方式避免了單繼承帶來的局限性;

Thread T;

T.setMaemon(true);//設定線程為後台線程;當所有前台線程結束後後台線程自動結束;

T.notify();//喚醒本線程;

T.notifyAll();//喚醒全部線程;

T.interrupt();//中斷線程;

Thread.sleep(100);//暫停線程100毫秒

synchronized:預設鎖定的是本身,也可以鎖定自訂的對象;

必須要有兩個及以上的線程執行,多個線程使用同一個鎖,必須保證同步過程中只能有一個線程在運行;

判斷同步: 明確哪些代碼是需要多線程啟動並執行代碼,明確共用資料,明確多線程運行代碼中哪些語句是操作共用資料;

class Tickets implements Runnable
{
private int tick = 100;
public void run() { // public synchronized void run()
while (tick > 0) {
synchronized (this) {
if (tick > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.toString() + "sale:" + tick--);
}
}
}
}

如上:tick就是共用資料,操作tick就需要在synchronized中進行操作,synchroized鎖定的就是Tickets本身;

等待喚醒機制: 在操作同步線程時,都必須要標識它們所操作線程所持有的鎖,只有同一個鎖上的被等待線程,才可以被同一個鎖上的notify喚醒,不可以對不同鎖中的線程進行了喚醒;(也即:等待和喚醒必須是同一個鎖)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.