国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

java Thread 多線程

2019-11-26 16:11:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Thread 創(chuàng)建線程的兩種方法:

1、定義類繼承Thread類,覆寫(xiě)類中的run方法,調(diào)用類對(duì)象的start方法,start方法啟動(dòng)線程,調(diào)用run方法。Thread類用于描述線程;該類定義一個(gè)功能run,用于存儲(chǔ)線程要運(yùn)行的代碼。

2、定義類實(shí)現(xiàn)Runnable接口,覆蓋Runnable接口中的方法,通過(guò)Thread類建立線程對(duì)象,將Runnable接口的子類對(duì)象作為實(shí)際參數(shù)傳遞給Thread類的構(gòu)造函數(shù),調(diào)用Thread類的start方法開(kāi)啟線程,線程會(huì)調(diào)用Runnable接口子類中的run方法;

實(shí)現(xiàn)接口Runnable的方式避免了單繼承帶來(lái)的局限性;

Thread T;

T.setMaemon(true);//設(shè)置線程為后臺(tái)線程;當(dāng)所有前臺(tái)線程結(jié)束后后臺(tái)線程自動(dòng)結(jié)束;

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

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

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

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

synchronized:默認(rèn)鎖定的是本身,也可以鎖定自定義的對(duì)象;

必須要有兩個(gè)及以上的線程執(zhí)行,多個(gè)線程使用同一個(gè)鎖,必須保證同步過(guò)程中只能有一個(gè)線程在運(yùn)行;

判斷同步: 明確哪些代碼是需要多線程運(yùn)行的代碼,明確共享數(shù)據(jù),明確多線程運(yùn)行代碼中哪些語(yǔ)句是操作共享數(shù)據(jù);

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就是共享數(shù)據(jù),操作tick就需要在synchronized中進(jìn)行操作,synchroized鎖定的就是Tickets本身;

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 桦南县| 青浦区| 东莞市| 信丰县| 全南县| 博罗县| 宽甸| 沙湾县| 南平市| 花莲市| 武川县| 张掖市| 彰化县| 临西县| 巴东县| 阿拉善盟| 武山县| 江口县| 烟台市| 石河子市| 商都县| 界首市| 明溪县| 临武县| 巴青县| 永吉县| 荃湾区| 新蔡县| 滦平县| 龙山县| 顺昌县| 磐安县| 邓州市| 海口市| 长宁区| 阿拉善左旗| 泊头市| 南郑县| 青浦区| 黄平县| 盐津县|