91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 3KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-04
  • 語言: Java
  • 標簽:

資源簡介

環境:Windows XP Professional SP3, JDK 1.6 使用步驟: 1.下載解壓之后,在控制臺運行javac ThreadPoolTest.java 2.然后根據提示運行java命令執行示例程序,觀看線程池的運行結果 目標:Java中多線程技術是一個難點,但是也是一個核心技術。因為Java本身就是一個多線程語言。本人目前在給46班講授Swing的網絡編程--使用Swing來模擬真實的QQ實時聊天軟件。因為涉及到Socket編程,所以一定會使用多線程編程。這里本人翻寫一個通用的線程池類,它可以用來作為工具類處理許多多線程問題。代碼注釋非常詳盡,一行注釋一行代碼。 閱讀對象:非常熟悉Java的基本概念,并且熟悉命令行編寫代碼的人員。

資源截圖

代碼片段和文件信息

import?java.util.linkedList;

/**
????功能:一個線程池是一組有限數量的線程,它們被用來完成執行任務
翻寫作者:Arkliszeng
時間:2010-02-21
地點:北大青鳥錦江中心學術部
版本:ver?1.0.0
備注:
線程池使用ThreadGroup?API來實現.線程組表示一個線程的集合。
此外,線程組也可以包含其他線程組。線程組構成一棵樹,在樹中,
除了初始線程組外,每個線程組都有一個父線程組。允許線程訪問
有關自己的線程組的信息,但是不允許它訪問有關其線程組的父線
程組或其他任何線程組的信息。

*/
public?class?ThreadPool?extends?ThreadGroup?{
????private?boolean?isAlive;?//表示線程是否活首
????private?linkedList?taskQueue;?//定義一個雙向隊列
????private?int?threadID;?//保存線程的ID
????private?static?int?threadPoolID;?//表示線程池的ID

????/**
????????在構造方法創建線程池
????????@參數numThreads用來指定池中的線程個數
????*/
????public?ThreadPool(int?numThreads)?{
????????super(“線程池-“?+?(threadPoolID++));
????????setDaemon(true);//讓該線程組為精靈線程組

????????isAlive?=?true;//設置初始值為true

????????taskQueue?=?new?linkedList();//初始化任務隊列
????????for?(int?i=0;?i????????????new?PooledThread().start();//啟動池中的線程
????????}
????}


????/**
????????功能:請求一個新的任務來運行,該方法立即返回。然后任務在下一下空閑
???????? 的線程中執行。該方法是線程安全的。
????????

任務開始執行時有序的到達時開始。
????????@參數task表示運行的任務。如果不null那么沒有任務執行。
????????@如果本ThreadPool關閉了,那么拋出IllegalStateException。
????*/
????public?synchronized?void?runTask(Runnable?task)?{
???? //如果線程池的狀態isAlive==false值
????????if?(!isAlive)?{
????????????throw?new?IllegalStateException();//那么拋出異常
????????}
????????//如果任務不為null
????????if?(task?!=?null)?{
???????? //那么在任務把該任務加入任務階段
????????????taskQueue.add(task);
????????????//然后喚醒空閑的線程執行該任務
????????????notify();
????????}

????}

/**
功能:獲取任務對象
*/
????protected?synchronized?Runnable?getTask()?throws?InterruptedException{
???? //如果任務隊列不是空的
????????while?(taskQueue.size()?==?0)?{
???????? //如果線程池的狀態isAlive==false值
????????????if?(!isAlive)?{
????????????????return?null;?//那么返回null值
????????????}
????????????wait();//否則等待任務出現(添加任務)
????????}
????????//否則任務隊列中的一個任務對象
????????return?(Runnable)taskQueue.removeFirst();
????}


????/**
????????功能:關閉該線程池并且立即返回。讓所有線程停止執行,并且所有等待任務停止執行。
???????? 一旦一個ThreadPool被關閉了,那么該線程池中的所有的線程不再運行。
????*/
????public?synchronized?void?close()?{
???? //如果線程池是活的
????????if?(isAlive)?{
?? //那么置為false
????????????isAlive?=?false;
????????????//然后把任務隊列清空
????????????taskQueue.clear();
????????????//最后終止線程池中所有線程的運行
????????????interrupt();
????????}
????}


????/**
????????功能:關閉該ThreadPool活動然后等待所有的線程運行完成。這樣所有等待的任務會被執行。
????*/
????public?void?join()?{
????????//?當ThreadPool不再活動時喚醒所有等待的線程
????????synchronized?(this)?{
????????????isAlive?=?false;
????????????notifyAll();
????????}

????????//?然后等待所有池中的線程對象執行完畢
????????Thread[]?threads?=?new?Thread[activeCount()];?//創建所有池中的活動線程
????????//把此線程組及其子組中的所有活動線程復制到指定數組中
????????int?count?=?enumerate(threads);
????????//然后按序讓每個線程執行完畢
????????for?(int?i=0;?i????????????try?{
????????????????threads[i].join();
????????????}
????????????catch?(InterruptedException?ex)?{?}
????????}
????}


????/**
????????功能:定義線程池中的線程,這些線程對象用來運行任務對象(Runnables)
??????


?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????5259??2010-02-21?15:08??ThreadPool.java

?????文件???????1673??2010-02-21?15:50??ThreadPoolTest.java

-----------?---------??----------?-----??----

?????????????????6932????????????????????2


評論

共有 條評論