电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

創建Java中的線程池

瀏覽:5日期:2024-07-01 13:05:39
內容: 線程是Java的一大特性,它可以是給定的指令序列、給定的方法中定義的變量或者一些共享數據(類一級的變量)。在Java中每個線程有自己的堆棧和程序計數器(PC),其中堆棧是用來跟蹤線程的上下文(上下文是當線程執行到某處時,當前的局部變量的值),而程序計數器則用來跟蹤當前線程正在執行的指令。 在通常情況下,一個線程不能訪問另外一個線程的堆棧變量,而且這個線程必須處于如下狀態之一: 1.排隊狀態(Ready),在用戶創建了一個線程以后,這個線程不會立即運行。當線程中的方法start()被調用時,這個線程就會進行排隊狀態,等待調度程序將它轉入運行狀態(Running)。當一個進程被執行后它也可以進行排隊狀態。如果調度程序允許的話,通過調用方法yield()就可以將進程放入排隊狀態。 2.運行狀態(Running),當調度程序將CPU的運行時間分配給一個線程,這個線程就進入了運行狀態開始運行。 3.等待狀態(Waiting),很多原因都可以導致線程處于等待狀態,例如線程執行過程中被暫停,或者是等待I/O請求的完成而進入等待狀態。 在Java中不同的線程具有不同的優先級,高優先級的線程可以安排在低優先級線程之前完成。如果多個線程具有相同的優先級,Java會在不同的線程之間切換運行。一個應用程序可以通過使用線程中的方法setPriority()來設置線程的優先級,使用方法getPriority()來獲得一個線程的優先級。 線程的生命周期一個線程的的生命周期可以分成兩階段:生存(Alive)周期和死亡(Dead)周期,其中生存周期又包括運行狀態(Running)和等待狀態(Waiting)。當創建一個新線程后,這個線程就進入了排隊狀態(Ready),當線程中的方法start()被調用時,線程就進入生存周期,這時它的方法isAlive()始終返回真值,直至線程進入死亡狀態。 線程的實現有兩種方法可以實現線程,一種是擴展java.lang.Thread類,另一種是通過java.lang.Runnable接口。 Thread類封裝了線程的行為。要創建一個線程,必須創建一個從Thread類擴展出的新類。由于在Thread類中方法run()沒有提供任何的操作,因此,在創建線程時用戶必須覆蓋方法run()來完成有用的工作。當線程中的方法start()被調用時,方法run()再被調用。下面的代碼就是通過擴展Thread類來實現線程: import java.awt.*;class Sample1{ public static void main(String[] args){ Mythread test1=new Mythread(1); Mythread test2=new Mythread(2); test1.start(); test2.start(); }}class Mythread extends Thread { int id; Mythread(int i) { id=i;} public void run() { int i=0; while(id+i==1){ try {sleep(1000); } catch(InterruptedException e) {} } System.out.println(“The id is +id);} 通常當用戶希望一個類能運行在自己的線程中,同時也擴展其它某些類的特性時,就需要借助運行Runnable接口來實現。Runnable接口只有一個方法run()。不論什么時候創建了一個使用Runnable接口的類,都必須在類中編寫run()方法來覆蓋接口中的run()方法。例如下面的代碼就是通過Runnable接口實現的線程: import java.awt.*;import java.applet.Applet;public class Bounce extends Applet implements Runnable{ static int r=30; static int x=100; static int y=30; Thread t; public void init() { t = new Thread(this); t.start(); } public void run() { int y1=+1; int i=1; int sleeptime=10; while(true) { y+=(i*y); if(y-rgetSize().height) y1*=-1; try{ t.sleep(sleeptime); }catch(InterruptedException e){ } } }} 為什么要使用線程池在Java中,如果每當一個請求到達就創建一個新線程,開銷是相當大的。在實際使用中,每個請求創建新線程的服務器在創建和銷毀線程上花費的時間和消耗的系統資源,甚至可能要比花在處理實際的用戶請求的時間和資源要多得多。除了創建和銷毀線程的開銷之外,活動的線程也需要消耗系統資源。如果在一個JVM里創建太多的線程,可能會導致系統由于過度消耗內存或“切換過度而導致系統資源不足。為了防止資源不足,服務器應用程序需要一些辦法來限制任何給定時刻處理的請求數目,盡可能減少創建和銷毀線程的次數,特別是一些資源耗費比較大的線程的創建和銷毀,盡量利用已有對象來進行服務,這就是“池化資源技術產生的原因。 線程池主要用來解決線程生命周期開銷問題和資源不足問題。通過對多個任務重用線程,線程創建的開銷就被分攤到了多個任務上了,而且由于在請求到達時線程已經存在,所以消除了線程創建所帶來的延遲。這樣,就可以立即為請求服務,使應用程序響應更快。另外,通過適當地調整線程池中的線程數目可以防止出現資源不足的情況。 創建一個線程池一個比較簡單的線程池至少應包含線程池管理器、工作線程、任務隊列、任務接口等部分。其中線程池管理器(ThreadPool Manager)的作用是創建、銷毀并管理線程池,將工作線程放入線程池中;工作線程是一個可以循環執行任務的線程,在沒有任務時進行等待;任務隊列的作用是提供一種緩沖機制,將沒有處理的任務放在任務隊列中;任務接口是每個任務必須實現的接口,主要用來規定任務的入口、任務執行完后的收尾工作、任務的執行狀態等,工作線程通過該接口調度任務的執行。下面的代碼實現了創建一個線程池,以及從線程池中取出線程的操作: public class ThreadPool{ private Stack threadpool = new Stack(); private int poolSize; private int currSize=0; public void setSize(int n) { poolSize = n; } public void run() { for(int i=0;i
標簽: Java
相關文章:
主站蜘蛛池模板: 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 临朐空调移机_空调维修「空调回收」临朐二手空调| 沈阳液压泵_沈阳液压阀_沈阳液压站-沈阳海德太科液压设备有限公司 | 真空乳化机-灌装封尾机-首页-温州精灌| 不锈钢管件(不锈钢弯头,不锈钢三通,不锈钢大小头),不锈钢法兰「厂家」-浙江志通管阀 | 升降机-高空作业车租赁-蜘蛛车-曲臂式伸缩臂剪叉式液压升降平台-脚手架-【普雷斯特公司厂家】 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 冷轧机|两肋冷轧机|扁钢冷轧机|倒立式拉丝机|钢筋拔丝机|收线机-巩义市华瑞重工机械制造有限公司 | 南京泽朗生物科技有限公司-液体饮料代加工_果汁饮料代加工_固体饮料代加工 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 正压送风机-多叶送风口-板式排烟口-德州志诺通风设备 | 蜜蜂职场文库_职场求职面试实用的范文资料大全 | 多功能干燥机,过滤洗涤干燥三合一设备-无锡市张华医药设备有限公司 | 双杰天平-国产双杰电子天平-美国双杰-常熟双杰仪器 | 洁净化验室净化工程_成都实验室装修设计施工_四川华锐净化公司 | 工业设计,人工智能,体验式3D展示的智能技术交流服务平台-纳金网 J.S.Bach 圣巴赫_高端背景音乐系统_官网 | 长沙网站建设制作「网站优化推广」-网页设计公司-速马科技官网 | 井式炉-台车式回火炉-丹阳市电炉厂有限公司 | 杭州货架订做_组合货架公司_货位式货架_贯通式_重型仓储_工厂货架_货架销售厂家_杭州永诚货架有限公司 | 深圳市超时尚职业培训学校,培训:月嫂,育婴,养老,家政;化妆,美容,美发,美甲. | RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 深圳办公室装修-写字楼装修设计-深圳标榜装饰公司 | 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 | 河南中专学校|职高|技校招生-河南中职中专网 | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | 密封圈_泛塞封_格莱圈-[东莞市国昊密封圈科技有限公司]专注密封圈定制生产厂家 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 电动高压冲洗车_价格-江苏速利达机车有限公司| 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | 井式炉-台车式回火炉-丹阳市电炉厂有限公司 | 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 广州市哲铭油墨涂料有限公司,水性漆生产研发基地 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 捷码低代码平台 - 3D数字孪生_大数据可视化开发平台「免费体验」 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 防爆电机生产厂家,YBK3电动机,YBX3系列防爆电机,YBX4节防爆电机--河南省南洋防爆电机有限公司 |