欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    java多线程发展.docx

    • 资源ID:941861       资源大小:619.40KB        全文页数:38页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    java多线程发展.docx

    1、java多线程发展Java多线程发展简史文章系本人原创,转载请保持完整性并注明出自四火的唠叨这篇文章,大部分内容,是周五我做的一个关于如何进行Java多线程编程的Knowledge Sharing的一个整理,我希望能对Java从第一个版本开始,在多线程编程方面的大事件和发展脉络有一个描述,并且提及一些在多线程编程方面常见的问题。对于Java程序员来说,如果从历史的角度去了解一门语言一个特性的演进,或许能有不同收获。引言首先问这样一个问题,如果提到Java多线程编程,你会想到什么? volatile、synchronized关键字? 竞争和同步? 锁机制? 线程安全问题? 线程池和队列?好吧,请

    2、原谅我在这里卖的关子,其实这些都对,但是又不足够全面,如果我们这样来谈论Java多线程会不会全面一些:1. 模型:JMM(Java内存模型)和JCM(Java并发模型)2. 使用:JDK中的并发包3. 实践:怎样写线程安全的代码4. 除错:使用工具来分析并发问题5. 可是,这未免太死板了,不是么?不如换一个思路,我们少谈一些很容易查到的语法,不妨从历史的角度看看Java在多线程编程方面是怎样进化的,这个过程中,它做了哪些正确的决定,犯了哪些错误,未来又会有怎样的发展趋势?另外,还有一点要说是,我希望通过大量的实例代码来说明这些事情。Linus说:“Talk is cheap, show me

    3、the code.”。下文涉及到的代码我已经上传,可以在此打包下载。诞生Java的基因来自于1990年12月Sun公司的一个内部项目,目标设备正是家用电器,但是C+的可移植性和API的易用性都让程序员反感。旨在解决这样的问题,于是又了Java的前身Oak语言,但是知道1995年3月,它正式更名为Java,才算Java语言真正的诞生。JDK 1.01996年1月的JDK1.0版本,从一开始就确立了Java最基础的线程模型,并且,这样的线程模型再后续的修修补补中,并未发生实质性的变更,可以说是一个具有传承性的良好设计。抢占式和协作式是两种常见的进程/线程调度方式,操作系统非常适合使用抢占式方式来调

    4、度它的进程,它给不同的进程分配时间片,对于长期无响应的进程,它有能力剥夺它的资源,甚至将其强行停止(如果采用协作式的方式,需要进程自觉、主动地释放资源,也许就不知道需要等到什么时候了)。Java语言一开始就采用协作式的方式,并且在后面发展的过程中,逐步废弃掉了粗暴的stop/resume/suspend这样的方法,它们是违背协作式的不良设计,转而采用wait/notify/sleep这样的两边线程配合行动的方式。一种线程间的通信方式是使用中断:123456789101112131415161718192021public class InterruptCheck extends Thread

    5、Overridepublic void run() System.out.println(start);while (true)if (Thread.currentThread().isInterrupted()break;System.out.println(while exit);public static void main(String args) Thread thread = new InterruptCheck();thread.start();try sleep(2000); catch (InterruptedException e) thread.interrupt();这

    6、是中断的一种使用方式,看起来就像是一个标志位,线程A设置这个标志位,线程B时不时地检查这个标志位。另外还有一种使用中断通信的方式,如下:12345678910111213141516171819202122232425262728public class InterruptWait extends Thread public static Object lock = new Object();Overridepublic void run() System.out.println(start);synchronized (lock) try lock.wait(); catch (Interr

    7、uptedException e) System.out.println(Thread.currentThread().isInterrupted();Thread.currentThread().interrupt(); / set interrupt flag againSystem.out.println(Thread.currentThread().isInterrupted();e.printStackTrace();public static void main(String args) Thread thread = new InterruptWait();thread.star

    8、t();try sleep(2000); catch (InterruptedException e) thread.interrupt();在这种方式下,如果使用wait方法处于等待中的线程,被另一个线程使用中断唤醒,于是抛出InterruptedException,同时,中断标志清除,这时候我们通常会在捕获该异常的地方重新设置中断,以便后续的逻辑通过检查中断状态来了解该线程是如何结束的。在比较稳定的JDK 1.0.2版本中,已经可以找到Thread和ThreadUsage这样的类,这也是线程模型中最核心的两个类。整个版本只包含了这样几个包:java.io、 java.util、java.a

    9、wt和java.applet,所以说Java从一开始这个非常原始的版本就确立了一个持久的线程模型。值得一提的是,在这个版本中,原子对象AtomicityXXX已经设计好了,这里给出一个例子,说明i+这种操作时非原子的,而使用原子对象可以保证+操作的原子性:123456789101112131415161718192021222324252627282930313233343536373839import java.util.concurrent.atomic.AtomicInteger;public class Atomicity private static volatile int non

    10、AtomicCounter = 0;private static volatile AtomicInteger atomicCounter = new AtomicInteger(0);private static int times = 0;public static void caculate() times+;for (int i = 0; i 1000; i+) new Thread(new Runnable() Overridepublic void run() nonAtomicCounter+;atomicCounter.incrementAndGet();).start();t

    11、ry Thread.sleep(1000); catch (InterruptedException e) public static void main(String args) caculate();while (nonAtomicCounter = 1000) nonAtomicCounter = 0;atomicCounter.set(0);caculate();System.out.println(Non-atomic counter: + times + :+ nonAtomicCounter);System.out.println(Atomic counter: + times

    12、+ : + atomicCounter);上面这个例子你也许需要跑几次才能看到效果,使用非原子性的+操作,结果经常小于1000。对于锁的使用,网上可以找到各种说明,但表述都不够清晰。请看下面的代码:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889public class Lock private static Object o = ne


    注意事项

    本文(java多线程发展.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开