java_5线程_扩展.ppt

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java_5线程_扩展

JavaSE 5线程特性及多线程编程 制作人:lfjiang 时间:2012-08-27 讲座内容 多线程编程概述、特点 线程的创建 Thread、Runnable 线程的生命周期 线程的常用方法及优先级 线程同步、死锁 线程间通信 notify\wait ThreadLocal的使用(实现线程范围的共享变量--连接池)、Timer的使用(定时器) 线程池的使用、CallableFuture、LockCondition、 Semaphore、CyclicBarrier、CountDownLatch、Exchanger、BlockingQueue 多线程编程概述 支持多线程编程是Java语言的又一大特色。多线程是相对于进程或单线程而言的,它具有并发性、执行效率高的特点。 线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程. 线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定。 线程相对于进程的优点:1、开销小;2、资源共享性好。 线程相对于进程的缺点:共享资源需要耗费一定的锁资源,同步相对复杂。 多线程编程特点 多个线程在运行时,系统自动在线程之间进行切换; 由于多个线程共存于同一块内存,线程之间的通信非常容易; Java将线程视为一个对象。线程要么是Thread类的对象,要么是接口Runnable的对象。 当多个线程并行执行时,具有较高优先级的线程将获得较多的CPU时间片; 优先级是从0到10的整数,并且它仅表示线程之间的相对关系; 多个线程共享一组资源,有可能在运行时产生冲突。必须采用synchronized关键字协调资源,实现线程同步。 线程的生命周期 线程优先级 注意1:在创建线程对象时,缺省的线程优先级是5,一般设置优先级4到6之间,不要设置为10,否则其它线程将执行不到。 注意2:Java的调度器能使高优先级的线程始终运行,一旦CPU有空闲,具有同等优先级的线程,以轮流的方式顺序使用时间片。 线程的一些常用方法 currentThread( ):返回当前运行的线程对象,是一个静态的方法。 sleep(int n):使当前运行的线程睡n个毫秒,然后继续执行,也是静态方法。 yield( ):使当前运行的线程放弃执行,切换到其它线程,是一个静态方法。 isAlive( ):判断线程是否处于执行的状态,返回值true表示处于运行状态,false表示已停止。 start( ):使调用该方法的线程开始执行。 run( ):该方法由start( )方法自动调用。 线程的一些常用方法 stop( ):使线程停止执行,并退出可执行状态,破坏数据。 suspend():使线程暂停执行,不退出可执行态 , 死锁。 resume( ):将暂停的线程继续执行。 setName(String s):赋予线程一个名字。 getName( ):获得调用线程的名字。 getPriority( ):获得调用线程的优先级。 setPriority(int p):设置线程的优先级。 join( ):等待线程死亡,若中断了该线程,将抛出异常。 setDaemon(boolean )设置该线程是daemon线程还是用户线程,Daemon线程也称服务线程,通常编成无限循环,在后台持续运行。 ThreadLocal应用 ThreadLocal的作用和目的:用于实现线程内的数据共享,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据。 每个线程调用全局ThreadLocal对象的set方法,就相当于往其内部的map中增加一条记录,key分别是各自的线程,value是各自的set方法传进去的值。在线程结束时可以调用ThreadLocal.clear()方法,这样会更快释放内存,不调用也可以,因为线程结束后也可以自动释放相关ThreadLocal变量。 ThreadLocal的应用场景: 订单处理包含一系列操作:减少库存量、增加一条流水台账、修改总账,这几个操作要在同一个事务中完成,通常也即同一个线程中进行处理,如果累加公司应收款的操作失败了,则应该把前面的操作回滚,否则,提交所有操作,这要求这些操作使用相同的数据库连接对象,而这些操作的代码分别位于不同的模块类中。 银行转账包含一系列操作: 把转出帐户的余额减少,把转入帐户的余额增加,这两个操作要在同一个事务中完成,它们必须使用相同的数据库连接对象,转入和转出操作的代码分别是两个不同的帐户对象的方法。 例如Strut2的ActionContext,同一段代码被不

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档