欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Java并发编程线程入门简介.doc

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

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

    Java并发编程线程入门简介.doc

    Java并发编程:线程     从一开始Java就被设计成支持并发编程的语言,java语言及其核心类库都有对并发编程的支持。从5.0开始,Java平台引入了一些高层的并发接口。本系列文章将尽可能的概括这些内容。 进程与线程并发编程模式中,有两个基本执行单元:进程与线程。进程和线程是现代操作系统的基本概念。一个进程拥有独立完备的执行环境,进程拥有私有的计算机资源,比如独立的内存空间、代码段、指令寄存器等等。进程在操作系统中基本等同于应用程序。最终用户看到的独立程序有可能是多个互相协作的进程,为了方便进程之间的通信,大多数操作系统支持进程间通信(Inter Process Communication, IPC)资源,比如管道和端口。IPC往往不仅仅在同一台计算机系统上使用,也往往运用于不同计算机系统之间的通信。线程通常也称轻量级进程,线程拥有的资源比进程的要少。线程只存在于进程中,一个进程可以包含多个线程。比如一个Java程序中可以有多个线程存在。线程不拥有独立的内存空间,而是和同进程内的其他线程共享进程的内存空间。由于线程共享进程的资源(内存或者打开的文件),同进程的线程之间往往需要大量的互斥和同步,保证资源使用的可确定性。这在前面文章中已经说过,资源共享是并发编程中同步和互斥的根源。由于进程的特性,使得它们之间资源共享的冲突比较少,因此并发编程主要是针对线程的,多线程编程是Java程序的基本特征。因此这儿讲的并发编程主要是针对Java线程编程的。Java线程简单来说,每个Java线程都有一个Thread实例与之对应。创建线程对象的方法通常有两种:1.直接创建和管理,也就是每当程序需要异步执行任务时就实例化一个Thread对象,然后自己管理其生命周期。2.抽象线程管理,使其从程序代码中分离开来。这些接口在java 5之后的java.util.concurrency包中提供。我们先讨论第一种方式,java.util.concurrency包提供的高层工具我们在后面的文章再讨论。第一种方式创建线程非常直接,有两种方法可以创建一个线程实例:1.生成一个Runnable对象,并将它传递给Thread对象。1 public class HelloWorld implements Runnable 2     public void run() 3         System.out.println("Hello World");4     5     public static void main(String args) 6         (new Thread(new HelloWorld().start();7     8 92.继承Thread并实现其run方法:1 public class HelloThread extends Thread 2     public void run() 3         System.out.println("Hello World!");4     5     public static void main(String args) 6         (new HelloThread().start();7     8 9        如何选择使用哪种方式呢?第一种模式更为通用,实现一个Runnable接口允许你继承并复用某类。第二种更简单,缺点是必须继承Thread。你可以根据具体情况选择。Thread对象中定义了一些有用的方法来管理线程的生命周期:1.public static void sleep(long millis)throws InterruptedException方法,该方法挂起当前线程一段时间,主动让出处理器让其他线程使用。sleep方法还可以用来控制执行的速度。注意这个方法在挂起线程时,有可能被其他线程中断挂起,因此不能依赖其时间参数来定时。2.public void interrupt()方法,该方法中断某线程正在做的事情,告诉它某些事情发生了需要处理。程序员需要捕捉这个中断异常,并在异常处理中执行应该做的动作。接受中断的方式有两种,一种是被中断线程目前正在执行一个能抛出InterruptedException的方法,比如sleep或者Object.wait等方法,还比如一些可以被interrupted的SeverSocket.accept方法等等。下面是示例代码:1 for (int i = 0; i < importantInfo.length; i+) 2     /Pause for 4 seconds3     try 4         Thread.sleep(4000);5      catch (InterruptedException e) 6         /We've been interrupted: no more messages.7         return;8     9     /Print a message10     System.out.println(importantInfoi);11 12另一种是程序正在执行一些不抛出InterruptedException的动作,这时该线程要负责定期使用interrupted()方法检查当前线程是否受到中断信号,然后做相应处理。下面是示例代码:1 for (int i = 0; i < inputs.length; i+) 2     heavyCrunch(inputsi);3     if (Thread.interrupted()() 4         /We've been interrupted: no more crunching.5         return;6     7 8         SwingWorker的cancel方法就是采用的第二种模式实现的,SwingWorker的cancel方法调用其任务线程的interrupt()方法,而doInBackground方法应该定期调用SwingWorker的isCanceled方法判断当前任务是否被取消。isCanceled()最终调用了Thread.interrupted()方法检测当前线程是否接受到中断信号。3.public static Thread currentThread()获得当前线程对象。4.public boolean isInterrupted()该线程是否受到中断信号。5.public static boolean interrupted(),检测当前线程是否接受到中断信号。它实际上是调用了Thread.currentThread().isInterrupted()实现的。6.public final void join()该方法允许一个线程等待另一个线程的结束。比如t是一个目前正在执行的线程,那么t.join()将目前线程挂起直至线程t结束。        下面举例总结本节所说明的一些概念。SimpleThreads由两个线程组成,第一个是主线程,主线程使用一个Runnable对象MessageLoop创建一个新的线程,并等待该线程结束。如果MessageLoop线程耗时太长,那么主线程将强制中断该线程。MessageLoop线程打印出一系列的消息,如果被中断,则打印消息并退出:  1 public class SimpleThreads   2   3 /Display a message, preceded by the name of the current thread  4   5 static void threadMessage(String message)   6   7 String threadName = Thread.currentThread().getName();  8   9 System.out.format("%s: %s%n", threadName, message);10 11 12 13 private static class MessageLoop implements Runnable 14 15 public void run() 16 17 String importantInfo = 18 19 "Mares eat oats",20 21 "Does eat oats",22 23 "Little lambs eat ivy",24 25 "A kid will eat ivy too"26 27 ;28 29 try 30 31 for (int i = 0; i < importantInfo.length; i+) 32 33 /Pause for 4 seconds34 35 Thread.sleep(4000);36 37 /Print a message38 39 threadMessage(importantInfoi);40 41 42 43 catch (InterruptedException e) 44 45 threadMessage("I wasn't done!");46 47 48 49 50 51 52 53 public static void main(String args) throws InterruptedException 54 55 /Delay, in milliseconds before we interrupt MessageLoop56 57 /thread (default one hour).58 59 long patience = 1000 * 60 * 60;60 61 /If command line argument present, gives patience in seconds.62 63 if (args.length > 0) 64 65 try 66 67 patience = Long.parseLong(args0) * 1000;68 69 catch (NumberFormatException e) 70 71 System.err.println("Argument must be an integer.");72 73 System.exit(1);74 75 76 77 78 79 threadMessage("Starting MessageLoop thread");80 81 long startTime = System.currentTimeMillis();82 83 Thread t = new Thread(new MessageLoop();84 85 t.start();86 87 threadMessage("Waiting for MessageLoop thread to finish");88 89 /loop until MessageLoop thread exits90 91 while (t.isAlive() 92 93 threadMessage("Still waiting.");94 95 /Wait maximum of 1 second for MessageLoop thread to96 97 /finish.98 99 t.join(1000);100 101 if (System.currentTimeMillis() - startTime) > patience) &&t.isAlive() 102 103 threadMessage("Tired of waiting!");104 105 t.interrupt();106 107 /Shouldn't be long now - wait indefinitely108 109 t.join();110 111 112 113 114 115 threadMessage("Finally!");116 117 118 119 120

    注意事项

    本文(Java并发编程线程入门简介.doc)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开