- 1、本文档共69页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java线程:新特征-线程池-可变尺寸的线程池 在上例的基础上改一行创建pool对象的代码为: ?//创建一个使用单个?worker线程的?Executor,以无界队列方式来运行该线程。ExecutorService pool = Executors.newSingleThreadExecutor(); Java线程:新特征-线程池-延迟连接池 它可安排在给定延迟后运行命令或者定期地执行(应用于网络爬虫,舆情监控系统) ScheduledTest.java Java线程:新特征-阻塞队列 阻塞队列是Java线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素的操作会被阻塞等待,直到有空位为止。同样,当队列为空时候,请求队列元素的操作同样会阻塞等待,直到有可用元素为止。? 有了这样的功能,就为多线程的排队等候的模型实现开辟了便捷通道,非常有用。 java.util.concurrent.BlockingQueue继承了java.util.Queue接口,可以参看API文档。 BlockingQueueTest.java 输出到元素19时候,就一直处于等待状态,因为队列满了,程序阻塞了 另外,阻塞队列还有更多实现类,用来满足各种复杂的需求:ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue, SynchronousQueue,具体的API差别也很小 JAVA 线程:新特征-阻塞栈 对于阻塞栈,与阻塞队列相似。不同点在于栈是“后入先出”的结构,每次操作的是栈顶,而队列是“先进先出”的结构,每次操作的是队列头。 这里要特别说明一点的是,阻塞栈是Java6的新特征。、 Java为阻塞栈定义了接口:java.util.concurrent.BlockingDeque,其实现类也比较多,具体可以查看JavaAPI文档。 BlockingDequeTest.java 程序并没结束,二是阻塞住了,原因是栈已经满了,后面追加元素的操作都被阻塞了 JAVA Java线程:新特征-原子量 所谓的原子量即操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的。 为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题。在Java5之前,可以通过volatile、synchronized关键字来解决并发访问的安全问题,但这样太麻烦。 Java5之后,专门提供了用来进行单变量多线程并发安全访问的工具包java.util.concurrent.atomic,其中的类也很简单。 AtomicTest.java 原子量虽然可以保证单个变量在某一个操作过程的安全,但无法保证你整个代码块,或者整个程序的安全性。因此,通常还应该使用锁等同步机制来控制整个程序的安全性 JAVA 线程新特性 新特征-障碍器 新特征-条件变量 新特征-信号量 新特征-锁 新特征-返回值线程 新特征-自定义线程池 …… ssssssssssss * * * * * * * * * * * JAVA 线程的优先级和线程让步yield() 当线程池中线程都具有相同的优先级,调度程序的JVM实现自由选择它喜欢的线程。这时候调度程序的操作有两种可能:一是选择一个线程运行,直到它阻塞或者运行完成为止。二是时间分片,为池内的每个线程提供均等的运行机会。 设置线程的优先级:线程默认的优先级是创建它的执行线程的优先级。可以通过setPriority(int newPriority)更改线程的优先级。例如: ??????? Thread t = new MyThread();??????? t.setPriority(8);??????? t.start(); 线程优先级为1~10之间的正整数,JVM从不会改变一个线程的优先级。然而,1~10之间的值是没有保证的。一些JVM可能不能识别10个不同的值,而将这些优先级进行每两个或多个合并,变成少于10个的优先级,则两个或多个优先级的线程可能被映射为一个优先级。 线程默认优先级是5,Thread类中有三个常量,定义线程优先级范围: static int MAX_PRIORITY???????????线程可以具有的最高优先级。static int MIN_PRIORITY???????????线程可以具有的最低优先级。static int NORM_PRIORITY???????????分配给线程的默认优先级。 JAVA线程的优先级和线程让步yield() Thread.yield()方法
您可能关注的文档
最近下载
- 国家二级C语言机试(选择题)模拟试卷11(共313题).pdf
- 【国家标准】DB34T 5012-2015 安徽省回弹法检测泵送混凝土强度技术规程.pdf
- 毕业设计(论文)-睡眠呼吸暂停报警监护仪的设计.doc
- 工人商调登记表.doc
- 南宋广西买马路对广西与大理两地关系的影响.pdf VIP
- 推进云南农业新质生产力发展的对策分析.docx VIP
- (高清版)DB52∕T 1222-2017 地理标志产品 习水红稗.pdf VIP
- 净化空调工程安装施工方案.pdf VIP
- 第47届世界技能大赛江苏省选拔赛3D数字游戏艺术项目技术工作文件(1).pdf
- 经营性公路建设项目投资人招标文件.pdf VIP
文档评论(0)