您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页Java多线程开发技巧

Java多线程开发技巧

来源:华佗小知识
Java多线程开发技巧

很多开发者谈到Java多线程开发,仅仅停留在new Thread(...).start()或直接使用Executor框架这个层面,对于线程的管理和控制却不够深入,通过读《Java并发编程实践》了解到了很多不为我知但又非常重要的细节,今日整理如下。

不应用线程池的缺点

有些开发者图省事,遇到需要多线程处理的地方,直接new

Thread(...).start(),对于一般场景是没问题的,但如果是在并发请求很高的情况下,就会有些隐患:

新建线程的开销。线程虽然比进程要轻量许多,但对于JVM来说,新建一个线程的代价还是挺大的,决不同于新建一个对象

资源消耗量。没有一个池来线程的数量,会导致线程的数量直接取决于应用的并发量,这样有潜在的线程数据巨大的可能,那么资源消耗量将是巨大的

稳定性。当线程数量超过系统资源所能承受的程度,稳定性就会成问题 制定执行策略

在每个需要多线程处理的地方,不管并发量有多大,需要考虑线程的执行策略

任务以什么顺序执行 可以有多少个任何并发执行 可以有多少个任务进入等待执行队列

系统过载的时候,应该放弃哪些任务?如何通知到应用程序? 一个任务的执行前后应该做什么处理 线程池的类型

不管是通过Executors创建线程池,还是通过Spring来管理,都得清楚知道有哪几种线程池:

FixedThreadPool:定长线程池,提交任务时创建线程,直到池的最大容量,如果有线程非预期结束,会补充新线程

CachedThreadPool:可变线程池,它犹如一个弹簧,如果没有任务需求时,它回收空闲线程,如果需求增加,则按需增加线程,不对池的大小做

SingleThreadExecutor:单线程。处理不过来的任务会进入FIFO队列等待执行

SecheduledThreadPool:周期性线程池。支持执行周期性线程任务 其实,这些不同类型的线程池都是通过构建一个ThreadPoolExecutor来完成的,所不同的是

corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue,threadFactory这 么几个参数。具体可以参见JDK DOC。

线程池饱和策略

由以上线程池类型可知,除了CachedThreadPool其他线程池都有饱和的可能,当饱和以后就需要相应的策略处理请求线程的任 务,ThreadPoolExecutor采取的方式通过队列来存储这些任务,当然会根据池类型不同选择不同的队列,比如FixedThreadPool 和SingleThreadExecutor默认采用的是无限长度的LinkedBlockingQueue。但从系统可控性讲,最好的做法是使用定长的 ArrayBlockingQueue或有限的LinkedBlockingQueue,并且当达到上限时通过 ThreadPoolExecutor.setRejectedExecutionHandler方法设置一个拒绝任务的策略,JDK提供了 AbortPolicy、CallerRunsPolicy、DiscardPolicy、DiscardOldestPolicy几种策略,具体差异可 见JDK DOC

线程无依赖性

多线程任务设计上尽量使得各任务是无依赖的,所谓依赖性可两个方面:

线程之间的依赖性。如果线程有依赖可能会造成死锁或饥饿

调用者与线程的依赖性。调用者得监视线程的完成情况,影响可并发量

当然,在有些业务里确实需要一定的依赖性,比如调用者需要得到线程完成后结果,传统的Thread是不便完成的,因为run方法无返回值,只能通过 一些共享的变量来传递结果,但在Executor框架里可以通过Future和Callable实现需要有返回值的任务,当然线程的异步性导致需要有相应 机制来保证调用者能等待任务完成,关于Future和Callable的用法见下面的实例就一目了然了:

public class FutureRenderer {

private final ExecutorService executor = ...; void renderPage(CharSequence source) {

final List imageInfos = scanForImageInfo(source); Callable> task = new Callable>() { public List call() { List result = new ArrayList();

for (ImageInfo imageInfo : imageInfos) result.add(imageInfo.downloadImage()); return result; } };

Future> future = executor.submit(task); renderText(source); try {

List imageData = future.get(); for (ImageData data : imageData)

renderImage(data);

} catch (InterruptedException e) {

// Re-assert the thread's interrupted status Thread.currentThread().interrupt();

// We don't need the result, so cancel the task too future.cancel(true);

} catch (ExecutionException e) { throw launderThrowable(e.getCause()); } } }

以上代码关键在于List imageData = future.get();如果Callable类型的任务没有执行完时,调用者会阻塞等待。不过这样的方式还是得谨慎使用,很容易造成不良设计。另外对于这种需要等待的场景,就需要设置一个最大容忍时间timeout,设置方法可以在 future.get()加上timeout参数,或是再调用ExecutorService.invokeAll 加上timeout参数

线程的取消与关闭

一般的情况下是让线程运行完成后自行关闭,但有些时候也会中途取消或关闭线程,比如以下情况:

调用者强制取消。比如一个长时间运行的任务,用户点击\"cancel\"按钮强行取消

限时任务

发生不可处理的任务 整个应用程序或服务的关闭

因此需要有相应的取消或关闭的方法和策略来控制线程,一般有以下方法:

1)通过变量标识来控制

这种方式比较老土,但使用得非常广泛,主要缺点是对有阻塞的操作控制不好,代码示例如下所示:

public class PrimeGenerator implements Runnable { @GuardedBy(\"this\") private final List primes = new ArrayList();

private volatile boolean cancelled; public void run() {

BigInteger p = BigInteger.ONE; while (!cancelled ) { p = p.nextProbablePrime(); synchronized (this) { primes.add(p); } } }

public void cancel() { cancelled = true; } public synchronized List get() { return new ArrayList(primes); } } 2)中断

中断通常是实现取消最明智的选择,但线程自身需要支持中断处理,并且要处理好中断策略,一般响应中断的方式有两种:

处理完中断清理后继续传递中断异常(InterruptedException) 调用interrupt方法,使得上层能感知到中断异常 3) 取消不可中断阻塞

存在一些不可中断的阻塞,比如: java.io和java.nio中同步读写IO Selector的异步IO 获取锁

对于这些线程的取消,则需要特定情况特定对待,比如对于socket阻塞,如果要安全取消,则需要调用socket.close()

4)JVM的关闭

如果有任务需要在JVM关闭之前做一些清理工作,而不是被JVM强硬关闭掉,可以使用 JVM的钩子技术,其实JVM钩子也只是个很普通的技术,也就是用个map把一些需要JVM关闭前启动的任务保存下来,在JVM关闭过程中的某个环节来并 发启动这些任务线程。具体使用示例如下:

public void start() {

Runtime.getRuntime().addShutdownHook(new Thread() { public void run() {

try { LogService.this.stop(); }

catch (InterruptedException ignored) {} } });

继续组织两周一次的专题学习沙龙和互动式评课沙龙,结合教研活动的主题组织好教师学习、交流。听展示课的教师对听课内容进行精心、系统的评点,写成评课稿,在两周一次的互动式教学研讨沙龙中进行交流、探讨。与往年不同的是,在保证互动评课活动开展同时,不影响正常教学,本学期安排8次集体评课活动,其他评课通过qq群来交流、研讨。

指导思想 以新一轮课程改革为抓手,更新教育理念,积极推进教学改革。努力实现教学创新,改革教学和学习方式,提高课堂教学效益,促进学校的内涵性发展。同时,以新课程理念为指导,在全面实施新课程过程中,加大教研、教改力度,深化教学方法和学习方式的研究。正确处理改革与发展、创新与质量的关系,积极探索符合新课程理念的生物教学自如化教学方法和自主化学习方式。

本学期,我组将进一步确立以人为本的教育教学理论,把课程改革作为教学研究的中心工作,深入学习和研究新课程标准,积极、稳妥地实施和推进中学英语课程改革。以新课程理念指导教研工作,加强课程改革,紧紧地围绕新课程实施过程出现的问题,寻求解决问题的方法和途径。加强课题研究,积极支持和开展校本研究,提高教研质量,提升教师的研究水平和研究能力。加强教学常规建设和师资队伍建设,进一步提升我校英语教师的英语教研、教学水平和教学质量,为我校争创“三星”级高中而发挥我组的力量。

坚持以《基础教育课程改革纲要》为指导,认真学习贯彻课程改革精神,以贯彻实施基础教育课程改革为核心,以研究课堂教学为重点,以促进教师队伍建设为根本,以提高教学质量为目标,全面实施素质教育。

高二的历史教学任务是要使学生在历史知识、历史学科能力和思想品德、情感、态度、价值观各方面得到全面培养锻炼和发展,为高三年级的文科历史教学打下良好的基础,为高校输送有学习潜能和发展前途的合格高中毕业生打下良好基础。

全班共40人,其中男生15人,女生25人。学生的数学基础较一般,多数学生能掌握所学内容,少部分学生由于反映要慢一些,学习方法死板,没有人进行辅导,加之缺乏学习的主动性,不能掌握学习的内容。能跟上课的学生,课上活泼,发言积极,上课专心听讲,完成作业认真,学习比较积极主动,课后也很自觉,当然与家长的监督分不开。部分学生解答问题的能力较强,不管遇到什么题,只要读了两次,就能找到方法,有的方法还相当的简捷。有的学生只能接受老师教给的方法,稍有一点变动的问题就处理不了。个别学生是老师 本册的教学内容:(1)混合运算和应用题;(2)整数和整数四则运

算;(3)量的计量;(4)小数的意义和性质;(5)小数的加法和减法;(6)平行四边形和梯形

③提出教学任务:在全面发展体能的基础上,进一步发展灵敏、力量,速度和有氧耐力,武德的培养;引导学生学会合理掌握练习与讨论的时间,了解实现目标时可能遇到的困难。在不断体验进步和成功的过程中,表现出适宜的自信心,形成勇于克服困难积极向上,乐观开朗的优良品质;认识现代社会所必需的合作和竞争意识,在武术学习过程中学会尊重和关心他人,将自身健康与社会需要相,表现出良好的体育道德品质,结合本身项目去了解一些武术名人并能对他们进行简单的评价;加强研究性的学习,去讨论与研究技能的实用性,加强同学之间的讨论交流的环节。:

①总体目标:建立“健康第一”的理念,培养学生的健康意识和体魄,在必修田径教学的基础上进一步激发学生学习“初级长拳”、“剑”的兴趣,培养学生的终身体育意识,以学生身心健康发展为中心,重视学生主体地位的同时关注学生的个体差异与不同需求,确保每一个学生都受益,以及多样性和选择性的教学理念,结合学校的实际情况,设计本教学工作计划,以满足学生选项学生的需求,加深学生的运动体验和理解,保证学生在高一年田径必修基础上再加上“长拳”来引导男女生学习体育模块的积极性,再结合高二年的 “剑”选项课的学习中修满2学分。加强学习“长拳”以及“剑”的基本套路,提升学习的的兴趣,提升学生本身的素质,特别是武德的培养。

运动参与:a养成良好的练武的锻炼习惯。b根据科学锻炼的原则,制定并实施个人锻炼计划。c学会评价体育锻炼效果的主要方法。

运动技能:a认识武术运动项目的价值,并关注国内外重大体赛事。b有目的的提高技术战术水平,并进一步加强技、战术的运用能力。c学习并掌握社会条件下活动的技能与方法,并掌握运动创伤时和紧急情况下的简易处理方法。

身体健康:a能通过多种途径发展肌肉力量和耐力。b了解一些疾病等有关知识,并理解身体健康在学习、生活中和重要意义。c形成良好的生活方式与健康行为。

心理健康:a自觉通过体育活动改变心理状态,并努力获得成功感。b在武术练习活动中表现出调节情绪的意愿与行为。c在具有实用技能练习中体验到战胜困难带来喜悦。

社会适应:a在学习活动中表现出良好的体育道德与合作创新精神。b具有通过各种途径获取体育与健康方面知识和方法的能力。

采用教师示范与讲解,学生讨论,练习,教师评价,再进行个别指导,后进行学生练习,最后进行展示与学生的综合评价相结合的方式方法,培养学生的良好的学习习惯、学习方法更好地完成教学任务,达到教学目标;实行培优扶中辅差,,采用学习小组的建立,加强学习小组的相互学习、相互讨论、相互研究的功能,提升学习的效率;加强多边学科的整合,特别是加强心理健康的教育,加强运动力学、运动医学等进行学习,以提升学生的运动自我保护意识与能力。 (1)课题研究:加强校本课程“剑”、“平山初级长拳”的开发与教学;做好“趣味奥运会进入校园”课题的开题准备。做为“青春期健康教育进入校园”课题组的成员,协助课题组进行研究,开展活动。

(2)校本教研:加强校本课程的开发,加强体育备课组的教研能力,做为备课组长的我与其他老师加强讨论校本的研究与开发,本次校本开发重点放在“剑”、“初级长拳”、“花样篮球”三个项目上,有所侧重。(3)论文撰写:结合课题研究的内容进行撰写。

(4)校际、教研组、备课组教研活动:做为晋江市兼职中学体育教研员及校际组成员,积极参加校际组开展的各项活动,加强提升在校际组的教研水平,做好兼职教研员的本职工作,协助教研员开展教研活动;积极参加教研组的各项活动,提升教研水平;做为备课组长的我,我计划是积极组织本组老师一起提高高中的课改力度与水平,集中老师的备课时间与讨论在备课过程中出现的一系列问题,针对选项会出现的问题进行沟通,加强学习过程的评价,协调选项内容的评价标准及认证过程。

本册的重点:混合运算和应用题是本册的一个重点,这一册进一步学习三步式题的混合运算顺序,学习使用小括号,继续学习解答两步应用题的学习,进一步学习解答比较容易的三步应用题,使学生进一步理解和掌握复杂的数量关系,提高学生运用所学知识解决得意的实际问题的能力,并继续培养学

生检验应用题的解答的技巧和习惯。第二单元整数和整数的四则运算,是在前三年半所学的有关内容的基础上,进行复习、概括,整理和提高。先把整数的认数范围扩展到千亿位,总结十进制计数法,然后对整数四则运算的意义,运算定律加以概括总结,这样就为学习小数,分数打下较好的基础。第四单元量的计量是在前面已学的基础上把所学的计量单位加于系统整理,一方面使学生所学的知识更加巩固,一方面使学生为学习把单名数或复名数改写成用小数表示的单名数做好准备。

高考的文科综合能力测试更加强调考生对文科各学科整体知识的把握、综合分析问题的思维能力、为解决问题而迁移知识运用知识的能力。教师在教学中要体现多学科、多层次、多角度分析解决问题的通识教育理念。教师要认真学习和研究教材,转变教学观念,紧跟高考形势的发展,研究考试的变化,力争使高二的教学向高三教学的要求靠拢。

按照《教学大纲》和《考试说明》的要求,认真完成高二阶段的单科复习工作。坚持学科教学为主,落实基础知识要到位,适当兼顾史地政三个学科的综合要求,培养提高学生学科内综合的能力。从学生的实际出发,落实基础,提高学科思维能力和辩证唯物主义、历史唯物主义的理论水平。

本学期教研组重点加强对教师评课的指导,使教师的评课规范化,系统化,定期举行主题教学沙龙和“会诊式行动研究”,促进新教师的成长,加快我镇小学语文教师队伍成长速度和小学语文教育质量的全面提高。结合区里的活动安排,开展各项有意义的学生活动,培养提高学生的语文素养,调动启发学生的内在学习动机。

二、工作目标

以课改为中心,组织教师学习语文课程标准,转变教学观念,深入课堂教学研究,激发学生主动探究意识,培养学生创新精神和实践能力,努力提高学生语文素养。

2、进一步加强语文教师队伍建设,让“语文研究小组”,充分发挥学科带头人、骨干教师的示范作用,重视团队合作智慧、力量。开展“师徒结对”活动,以老带新,不断提高教师的业务素质。

3、组织教师开展切实有效的说课沙龙、评课沙龙,提高教师说课能力,和评课能力,能够结合主题教研活动,对典型课例进行互动研讨,开展教例赏析活动。

4、加强教研组集体备课,每周以段为单位组织一次集体备课,分析教材,赏析重点课文,进行文本细读,交流教学心得。让备课不再是走场,形式主义,而是真真实实为提高课堂效率服务,提高教师的素质服务。

5、根据上学期制定的语文常规活动计划,开展形式多样的学习竞赛活动、过关活动,激发学生学习语文的兴趣,在自主活动中提高学生的综合实践能力,促进个性和谐发展。

6、 加强学习质量调查、检测工作,及时分析,寻找得失,确保完成各项教学指标。

三、主要工作及具体措施

(一)骨干教师示范、把关,当好“领头羊”。

1、本学期,语文研究小组成员继续充分发挥学科带头人、骨干教师的示范作用,重视团队合作智慧、力量。教研组将围绕“探索实效性语文课堂教学模式”这个主题,深入开展精读课文教学有效性研讨活动。低段(1-2年级)则继续进行识字教学的有效性的探讨。分层、有序地开展教研活动,使教研活动更成熟、有效,切实提高我校语文老师的专业水平。

2、开展“师徒结对”活动,以老带新,不断提高教师的业务素质。 (二)年轻教师取经、学习,争取出成绩。

1、为了提高教学质量,促成新教师迅速成长,1—5年教龄新教师每一学期上1堂模仿课和一堂校内研讨课。上模仿课的内容可以通过观看名师的关盘、视频或者教学实录等途径,根据个人教学需要,有选择性地进行局部模仿,从而使新教师形成个人的教学风格 。

加强理论学习,推进新课程改革。

组织本组教师学习《普通高中英语课程标准》及课标解度,积极实践高中英语牛津教材,组织全组教师进一步学习、熟悉新教材的体系和特点,探

索新教材的教学模式,组织好新教材的研究课活动,为全组教师提供交流、学习的平台和机会。

加强课堂教学常规,提高课堂教学效率。

强化落实教学常规和“礼嘉中学课堂教学十项要求”。做好集体备课和二备以及反思工作。在认真钻研教材的基础上,抓好上课、课后作业、辅导、评价等环节,从而有效地提高课堂教学效率。加强教学方法、手段和策略的研究,引导教师改进教学方法的同时,引导学生改进学习方法和学习策略。

加强课题研究,提升教科研研究水平;加强师资队伍建设,提升教师的教学能力。

组织教师有效开展本组的和全校的课题研究工作做到有计划、有研究、有活动、有总结,并在此基础上撰写教育教学论文,并向报刊杂志和年会投稿。

制订好本组本学期的校公开课、示范课、汇报课计划,并组织好听课、评课等工作。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务