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

首頁 > 學院 > 開發(fā)設計 > 正文

Java線程入門教程

2019-11-18 10:59:37
字體:
來源:轉載
供稿:網友

    Java線程入門教程線程是java的內嵌特性,線程并不輕易把握,有專門介紹Java線程的書籍,讀者可以參考。由此可見Java線程的重要性,本文將具體介紹線程的基本知識。

     有的時候你可能想寫一個程序,每隔一段時間執(zhí)行相關的任務,這個時候你可以使用Timer和TimerTask,非常方便。你可以參考使用Java中的Timer和TimerTask。

     在Java中實現一個線程有兩種方法,第一是實現Runnable接口實現它的run()方法,第二種是繼續(xù)Thread類,覆蓋它的run()方法。下面是代碼示例:
public class DoSomething implements Runnable {
    public void run(){
     // here is where you do something
    }
}
public class DoAnotherThing extends Thread {
    public void run(){
 // here is where you do something
    }
}
這兩種方法的區(qū)別是,假如你的類已經繼續(xù)了其它的類,那么你只能選擇實現Runnable接口了,因為Java只答應單繼續(xù)的。

     Java中的線程有四種狀態(tài)分別是:運行、就緒、掛起、結束。假如一個線程結束了也就說明他是一個死線程了。當你調用一個線程實例的start()的方法的時候,這個時候線程進入就緒狀態(tài),注重并不是運行狀態(tài),當虛擬機開始分配給他CPU的運行時間片的時候線程開始進入運行狀態(tài),當線程進入等待狀態(tài),例如等待某個事件發(fā)生的時候,這時候線程處于掛起狀態(tài)。

     啟動一個線程你只需要調用start()方法,針對兩種實現線程的方法也有兩種啟動線程的方法,分別如下:
DoSomething doIt = new DoSomething();
Thread myThread = new Thread( doIt );
myThread.start();

DoAnotherThing doIt = new DoAnotherThing();
doIt.start();
由于安全等因素Thread中的stop()方法已經不推薦使用了,因此假如你想要停止一個線程的時候可以通過設置一個信號量,例如:
public class MyThread implements Runnable {
    PRivate boolean quit = false;

    public void run(){
    while( !quit ){
     // do something
    }
    }

    public void quit(){
     quit = true;
    }
}
    假如每個線程只做它自己的事情,那么就很簡單了,但是有的時候幾個線程可能要同時訪問一個對象并可能對它進行修改,這個時候你必須使用線程的同步在方法或者代碼塊使用要害字synchronized,例如:
public class Counter {
    private int counter;

    public synchronized int increment(){
 return ++counter;
    }

    public synchronized int decrement(){
 if( --counter < 0 ){
     counter = 0;
 }

 return counter;
    }
}
每個java對象都可以最為一個監(jiān)視器,當線程訪問它的synchronized方法的時候,他只答應在一個時間只有一個線程對他訪問,讓其他得線程排隊等候。這樣就可以避免多線程對共享數據造成破壞。記住synchronized是會耗費系統(tǒng)資源降低程序執(zhí)行效率的,因此一定要在需要同步的時候才使用,尤其在J2ME的開發(fā)中要小心。假如你要是想讓線程等待某個事件的發(fā)生然后繼續(xù)執(zhí)行的話,那么這就涉及到線程的調度了。在java中通過wait(),notify(),notifyAll()來實現,這三個方法是在Object類中定義的,當你想讓線程掛起的時候調用obj.wait()方法,在同樣的obj上調用notify()則讓線程重新開始運行。

      最后以SUN提供的ProdUCer/Consumer的例子來結束這篇文章,內容是Producer產生一個數字而Consumer消費這個數字,這個小程序里面基本覆蓋了本文所有的知識點。請具體研究一下代碼
public class Producer extends Thread {
    private CubbyHole cubbyhole;
    private int number;



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 巴彦县| 清徐县| 富源县| 方城县| 通海县| 唐山市| 曲阳县| 册亨县| 文昌市| 顺义区| 平南县| 车致| 大庆市| 屏山县| 丰原市| 大同市| 石屏县| 徐闻县| 开封市| 仁化县| 银川市| 波密县| 昂仁县| 西充县| 杭州市| 蒙山县| 正镶白旗| 西乡县| 科技| 东平县| 平舆县| 绥宁县| 陕西省| 丰台区| 新竹县| 黎平县| 会昌县| 柏乡县| 镇安县| 江城| 上杭县|