国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

初識JAVA多線程編程

luzhuqun / 1415人閱讀

摘要:多線程術語辨析任務和線程是不同的中類本身不執行任何操作它只驅動賦予它的任務而才是定義任務的地方創建任務的方式有兩種實現接口中的方法查看源碼可以看到只有一個方法使用直接繼承即可這樣就創建了一個任務暗示調度器該線程可以讓出資源了中實現方法部分源

java多線程 1. 術語辨析

任務和線程是不同的,Java中Thread類本身不執行任何操作,它只驅動賦予它的任務,而Runnable才是定義任務的地方.

2. 創建任務的方式有兩種 2.1 實現Runnable接口中的run方法

1.查看Runnable源碼,可以看到只有一個run()方法

   @FunctionalInterface
public interface Runnable {
    /**
     * When an object implementing interface Runnable is used
     * to create a thread, starting the thread causes the object"s
     * run method to be called in that separately executing
     * thread.
     * 

* The general contract of the method run is that it may * take any action whatsoever. * * @see java.lang.Thread#run() */ public abstract void run(); }

2.使用Runnable,直接繼承即可,這樣就創建了一個任務.

public class MyRunnable implements Runnable{

    @Override
    public void run() {
        int i=0;
        while(true)
            System.out.println(i++);
    }
    //暗示調度器該線程可以讓出資源了
    Thread.yield();
}
2.2 Thread中實現run方法

1.Thread部分源碼

/*
 * @see     Runnable
 * @see     Runtime#exit(int)
 * @see     #run()
 * @see     #stop()
 * @since   JDK1.0
 */
public class Thread implements Runnable {
    /* Make sure registerNatives is the first thing  does. */
    private static native void registerNatives();
    static {
        registerNatives();
    }

2.可以看到Thread繼承了Runnable接口,所以Thread創建任務也是用的run方法
3.代碼可以這樣寫

class MyThread extends Thread{
    @Override
    public void run() {
        int count=10;
        while(count--!=0)
            System.out.print(count+" ");
    }
}
3. 運行任務

1.不要誤會,下面的方法并未啟動一個線程,而是單純的調用了實現Runnable接口的MyRunnable的run()方法,所以該任務的運行依舊被分派到該main線程中,不會獨立運行在一個新線程里.

public class Main{
    public static void main(String[] args){
        Runnable runnable=new Runnable();
        runnable.run();
    }
}

2.調用Thread的start(),Thread中記錄了很多線程信息,包括線程名稱和優先級等,以MyRunnable的實例作參傳入Thread,然后start即可運行.

public static void main(String[] args){

Thread thread=new Thread(new MyRunnable);
thread.start()
}

3.在調用start()后,子線程不會因為主線程代碼執行結束而停止.

4. 使用執行器(Executor)管理Thread.
public static void main(String[] args){

    //常見執行器對象
    ExecutorService executorService= Executors.newCachedThreadPool();
    //向執行器中添加任務
    executorService.execute(new MyRunnable());
    //關閉向執行器中添加任務;
    executorService.shutdown();

創建執行器又三種類型可選,分別是newCachedThreadPool,newFixedThreadPool,newSingleThreadPool,區別如下

newCachedThreadPool:系統自動調配線程池中的線程數量,并主動復用已完成的線程資源.

newFixedThreadPool:可以自定義線程池中線程數量;

newSingleThreadPool:單例,線程池中只有一個線程,加載的任務會被排隊,任務只能一個個依次完成.

5.線程的返回值

1.有些任務執行完后需要返回值,那么創建任務時可以通過實現Callale接口而實現該目的,Callable是一種具有類型參數的泛型,因為返回值是需要定義類型的.

class Task implements Callable{

    @Override
    public String call() throws Exception {
        Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
        TimeUnit.MILLISECONDS.sleep(100);
        return "線程執行啦";
    }
}

2.然后在main()方法中接受返回值信息,對線程信息的管理可以用Future

public static void main(String[] args){
    ExecutorService executorService=Executors.newCachedThreadPool();
    Future future=executorService.submit(new Callable(){??? 
        @Override???
        public String call() throws Exception {
        return "執行啦";???
        }
    });
    //判斷是否完成
    System.out.println(future.isDone());
    //任務完成后,才會打印詞條語句,否則會阻塞.
    System.out.println(future.get());
    //判斷是否完成
    System.out.println(future.isDone());
}
----------輸出----------
false
執行啦
true

3.程序運行到get()方法時會阻塞,當運行完后,主程序才會繼續向后執行.

6. 程序的優先級

1.優先級的設置在run方法中

public void run(){

    //例如將優先級設置為10
    Thread.currentThread().setPriority(10)
}

2.為了方便移植,建議將優先級設置為Thread中的三個常量.

7. 后臺線程

1.設置后臺線程語法 thread.setDaemon(true);要在start()之前.
2.后臺線程創建的線程也為后臺線程.

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73495.html

相關文章

  • [初識C++] 何為最:心酸歷史

    摘要:上面需要了解的是這倆個版本都是破蛹成蝶的版本世界挑戰榜咋才前三還沒擠進去呀,你想想世界上有幾千中編程語言,在其中脫穎出來,可以說是天之嬌子,鳳毛麟角了。支持正版圖靈上面買吧,如果沒錢買盜版吧學完以后買本正版支持一下,創作不易是吧 ...

    forrest23 評論0 收藏0
  • 線程三分鐘就可以入個門了!

    摘要:系統級線程核心級線程由操作系統內核進行管理。值得注意的是多線程的存在,不是提高程序的執行速度。實現多線程上面說了一大堆基礎,理解完的話。虛擬機的啟動是單線程的還是多線程的是多線程的。 前言 之前花了一個星期回顧了Java集合: Collection總覽 List集合就這么簡單【源碼剖析】 Map集合、散列表、紅黑樹介紹 HashMap就是這么簡單【源碼剖析】 LinkedHashMa...

    awkj 評論0 收藏0
  • Java開發

    摘要:大多數待遇豐厚的開發職位都要求開發者精通多線程技術并且有豐富的程序開發調試優化經驗,所以線程相關的問題在面試中經常會被提到。將對象編碼為字節流稱之為序列化,反之將字節流重建成對象稱之為反序列化。 JVM 內存溢出實例 - 實戰 JVM(二) 介紹 JVM 內存溢出產生情況分析 Java - 注解詳解 詳細介紹 Java 注解的使用,有利于學習編譯時注解 Java 程序員快速上手 Kot...

    LuDongWei 評論0 收藏0

發表評論

0條評論

luzhuqun

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<