Java線程池的基礎應用,java線程池

來源:互聯網
上載者:User

Java線程池的基礎應用,java線程池

瞭解:原子性操作類的基礎用法

在java5以後,增加很多線程的內容,成為線程得並發庫。

在java.util.concurrent包及子包的API協助文檔,上面有對並發庫涉及內容

在java.util.concurrent.atomic包,有對基本資料,對數組中的基本資料,類中的基本資料等的操作

AtomicIneger類,可以解決多線程訪問整數的問題
AtomicBoolean.....
AtomicArray...運算元組的基本資料
AtomicIntegerFieldUodater<T>,操作類中的基本資料

並發庫的基本應用:

關於線程池的理解加深
以前只是知道有線程池這個東西,並不是很瞭解。

第一種方式:

Executors工具類,建立一個線程池,固定的線程池

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ThreadAtomic {public static void main(String[] args) {//5個線程的線程池ExecutorService threadPool = Executors.newFixedThreadPool(5);for(int j = 1;j<=10;j++){final int task = j;threadPool.execute(new Runnable(){public void run() {for(int i = 1;i<=10;i++){try {Thread.sleep(30);} catch (Exception e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+" is running "+i+" for task is "+ task);}}});//向池子中新增工作}System.out.println("10 task is over");}}

會發現,每次都只有5個任務在執行,執行到10次,後再換下5個任務

所以,池子中有n個線程,向池子中添加m個任務,能被執行的任務的最大數是n個,剩下的還未被執行的任務還在排隊等待。而且,不結束,因為池子中還有線程,雖然沒事幹,但還是在等待 threadPool.shutdownNow()/shutdown(),結束,就算還有任務也會被結束,該方法就是殺死池子中的所有線程。


第二種:

緩衝的線程池,簡單說就是線程池中的線程個數不確定,當有3個任務的時候,池子中的線程就是3個,每個線程拿一個任務做,當任務減少
時,池子中的多餘線程會被回收,總之,池子中的線程是動態

ExecutorService threadPool = Executors.newCachedThreadPool();


第三種:

只有一個線程的線程池,實際上不能叫做線程池,但是該線程池有一個好處,就是池中的線程死掉了,會自動建立一個新的線程,總之,
會保證池子中有一個線程存在,這也就可以解決,如何線上程死掉以後使其重新啟動

ExecutorService threadPool = Executors.newSingleThreadExecutor();

用線程池啟動定時器

調用ScheduledExectorService的schedule方法,返回的scheduleFuture對象可以取消任務

支援間隔重複任務的定時方式,不直接支援絕對定時方式,需要轉換成相對時間方式


Executors.newScheduledThreadPool(3).schedule(new Runnable() {public void run() {System.out.println("ok!");}}, 3, TimeUnit.SECONDS);//3秒後列印okExecutors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {public void run() {System.out.println("ok!");}}, 3,2, TimeUnit.SECONDS);


//3秒後ok,以後每隔2秒ok

注意它沒有提供,比如今天晚上9點...的方法,所以可以用今天晚上9點的毫秒值-目前時間的毫秒值,來設定


聯繫我們

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