1. 程式人生 > >java 7 併發程式設計——執行緒管理

java 7 併發程式設計——執行緒管理

中斷

執行緒中斷:threadinstance.interrupt()。
檢查執行緒是否中斷:例項方法isInterrupted()和Thread的靜態方法interrupted() ;推薦使用例項方法。

sleep和wait方法的區別

sleep wait
sleep()使當前執行緒進入停滯狀態(阻塞當前執行緒),讓出Cpu的使用、目的是不讓當前執行緒獨自霸佔該執行緒所獲的CPU資源,以留一定時間給其他執行緒執行的機會;
sleep()是Thread類的Static(靜態)的方法;因此他不能改變物件的機鎖,所以當在一個Synchronized塊中呼叫Sleep()方法是,執行緒雖然休眠了,但是物件的機鎖並木有被釋放,其他執行緒無法訪問這個物件(即使睡著也持有物件鎖)。
在sleep()休眠時間期滿後,該執行緒不一定會立即執行,這是因為其它執行緒可能正在執行而且沒有被排程為放棄執行,除非此執行緒具有更高的優先順序。
wait()方法是Object類裡的方法;當一個執行緒執行到wait()方法時,它就進入到一個和該物件相關的等待池中,同時失去(釋放)了物件的機鎖(暫時失去機鎖,wait(long timeout)超時時間到後還需要返還物件鎖);其他執行緒可以訪問; 
wait()使用notify或者notifyAlll或者指定睡眠時間來喚醒當前等待池中的執行緒。 
wait()必須放在synchronized block中,否則會在program runtime時丟擲java.lang.IllegalMonitorStateException異常。

守護執行緒

  • 當所有的非守護執行緒執行結束時,程式才算執行結束。(或者有個執行緒呼叫了System.exit()
    )。
  • 設定守護執行緒:setDaemon(true)
  • 守護執行緒的優先順序非常低,只有當程式中其他的執行緒不執行時,守護執行緒才執行。比如垃圾回收器。
  • setDaemon方法只能在start方法被呼叫之前執行,一旦執行緒開始執行,將不能改變。

異常處理器

  • 由於run方法不支援throws語句,因此必須捕獲非執行時異常,如果是執行時異常,會直接退出程式,在控制檯列印堆疊。
  • java提供了線上程中處理執行時異常的機制:UnCaughtExceptionHandler介面。實現介面中的unCaughtException(Thread t,Throwable e)方法。並且設定執行緒的異常處理器:threadInstane.setUnCaughtExceptionHandler(hander)
  • Thread類還有一個靜態方法setDefaultUncaughtExceptionHandler()將為程式中的所有執行緒設定異常處理器。
  • 當執行緒丟擲為捕獲的異常:1、找物件的處理器;2、找執行緒組的處理器;3、找預設的處理器;4、直接退出,列印到控制檯。

執行緒區域性變數

執行緒區域性變數為每個執行緒儲存了各自的屬性值,互不影響。使用set和get方法設定和獲取值。如果執行緒沒有為該變數設定值時,會預設呼叫它的initialValue方法。
例子:

private static ThreadLocal<Date> startDate = new 
    ThreadLocal<Date>(){
        protected Date initialValue(){
            return new Date();
        }           
};

使用工廠類建立執行緒

好處:

  • 更容易修改類,即更容易改變物件的建立方式
  • 更能限制物件的建立個數,(控制資源)
  • 更容易為建立的物件生成統計資料

實現ThreadFactory介面,實現唯一的方法Thread newThread(Runnable r)

相關推薦

java 7 併發程式設計——執行管理

中斷 執行緒中斷:threadinstance.interrupt()。 檢查執行緒是否中斷:例項方法isInterrupted()和Thread的靜態方法interrupted() ;推薦使用例項方法。 sleep和wait方法的區別 s

【從入門到放棄-Java併發程式設計-執行安全

概述 併發程式設計,即多條執行緒在同一時間段內“同時”執行。 在多處理器系統已經普及的今天,多執行緒能發揮出其優勢,如:一個

Java 7併發程式設計實戰手冊》第四章執行執行

感謝人民郵電大學授權併發網釋出此書樣章,新書購買傳送門=》噹噹網 本章將介紹下列內容: 建立執行緒執行器 建立固定大小的執行緒執行器 在執行器中執行任務並返回結果 執行多個任務並處理第一個結果 執行多個任務並處理所有結果 在執行器中延時執行任務 在執行器中週期性執行任務 在執行器中取消任務

(十三)java併發程式設計--執行中斷

1、自己新增執行緒退出標誌位。 如下程式碼所示: package thread_priority; /** * Created by fang on 2017/12/3. * */ public class MyThread imple

(十二)java併發程式設計--執行優先順序

執行緒的優先順序並不能保證現成的執行次序。只不過,優先順序高的執行緒獲取CPU資源的概率較大,優先順序低的也並不是沒有機會執行。 優先順序用1-10的整數表示,數值越大優先順序越高,預設

(十五)java併發程式設計--執行的死鎖(deadlock)

執行緒在作業系統使用不同的資源,一般以以下方式使用這些資源。 1)請求一個資源。 2)使用這個資源。 3)釋放資源。 1、什麼是死鎖? 死鎖的情況是,一些執行緒被阻塞,每個執行緒都擁有一個資源,並且等待另外一個程序以獲取另外的一個資源。 想了想

(十六)java併發程式設計--執行的死鎖解決方案(生產者和消費者幾種實現方式)

上一篇中,主要了解了什麼時候死鎖,並且提出死鎖的一個解決方案,多個鎖要按照一定的順序來。 本片主要是利用生產者消費者模式解決執行緒的死鎖。 多執行緒生產者和消費者一個典型的多執行緒程式。一個生產者生產提供消費的東西,但是生產速度和消費速度是不同的。這就需要讓

(十四)java併發程式設計--執行的阻塞

java中我們可以使用執行緒類的三種方式來阻止執行緒的執行。 執行緒的狀態圖如下(圖片來自網路): 1、yield() yield英文的意思是屈服,如同其意,當前執行緒屈服,暫停,讓同等優先順序的執行緒執行。 yield()方法可以暫停當前

Java併發程式設計--執行安全問題與解決方案

本文簡介: 用多執行緒開發的人都知道,在多執行緒的開發過程中有可能會出現執行緒安全問題(專業術語叫記憶體可見性問題),但並不一定每次都會出現。出現這樣的情況,也會另開發者頭皮發麻,無從下手,接下來我們會慢慢深入,揭開多執行緒的神祕面紗。 本文主要介紹了Jav

[Java併發程式設計]-執行的六種狀態及其狀態轉換

轉載請註明:http://blog.csdn.net/UniKylin/article/details/45050823 1.執行緒自身資訊 執行緒執行的過程會產生很多資訊,這些資訊都儲存在Thread類中的成員變數裡面,常見的有: a.執行緒的ID是唯

JAVA 併發程式設計-執行範圍內共享變數(五)

執行緒範圍內共享變數要實現的效果為:多個物件間共享同一執行緒內的變數未實現執行緒共享變數的demo:package cn.itcast.heima2; import java.util.HashMap; import java.util.Map; import java.u

java併發程式設計—— 執行池原理 詳解 ThreadPoolExecutor

為什麼要使用執行緒池 降低資源消耗: 通過重複利用執行緒,減少執行緒的建立銷燬損耗的資源 提高響應速度: 任務到達時,不用重新建立執行緒,之間可以使用已經建立好的執行緒執行 提高執行緒的可管理性 執行緒池實現分析 我們使用如下的demo來一步一

JAVA併發程式設計——執行協作通訊(二)

執行緒間的協作 在前面我們瞭解了很多關於同步(互斥鎖)的問題,下面來看一下執行緒之間的協作。這裡主要說一下Java執行緒中的join()、sleep()、yield()、wait()、notify()和notifyAll()方法。其中wait()、notify(

Java併發程式設計——執行池的使用(五)延時執行執行池ScheduledExecutorService

一、ScheduledExecutorService的延時執行功能 ScheduledExecutorService是延時執行的執行緒池,推薦用ScheduledExecutorService代替timer定時器。 建立一個ScheduledExecutor

01.JAVA併發程式設計-執行的使用-基本概念

執行緒定義        執行緒,有時被稱為輕量級程序(Lightweight Process,LWP),是程式執行流的最小單元。一個標準的執行緒由執行緒ID,當前指令指標(PC),暫存器集合和堆疊組成。如果沒有明確的協同機制,執行緒將彼此獨立執行。每一個程式

JAVA 併發程式設計-執行建立(二)

對於執行緒的建立及更加詳細的資訊可以參看部落格《執行緒》,下面是對執行緒建立的細化及簡單再實現。在java中如果要建立執行緒的話,一般有兩種方式:1)繼承Thread類;2)實現Runnable介面。方

Java併發程式設計——執行池的使用(三)執行執行任務、取消任務

一、執行緒池執行Runnable任務 executor.execute(runnable) executor.execute(new Runnable() { @Override public void run(

Java併發程式設計——執行池的使用(六)執行池的常用方法

整理了一下執行緒池經常用到的方法: //是否正在shutdown() executor.isTerminating(); //是否已經shutdown() executor.isTerminated(); //在3秒內是否shutdown(),如果不呼叫s

Java併發程式設計--執行封閉(Ad-hoc、棧、ThreadLocal)

執行緒封閉(Thread Confinement):僅在單執行緒內訪問資料,不需要同步。 常見應用是:JDBC(Java Database Connectivity)的Connection物件。 1.Ad-hoc執行緒封閉  指維護執行緒封閉性的職責完全由程式實現來承擔。A

Java 併發程式設計 | 執行池詳解

原文: https://chenmingyu.top/concurrent-threadpool/ 執行緒池 執行緒池用來處理非同步任務或者併發執行的任務 優點: 重複利用已建立的執行緒,減少建立和銷燬執行緒造成的資源消耗 直接使用執行緒池中的執行緒,提高響應速度 提高執行緒的可管理性,由執行緒池同一管理