您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 多线程及java5的线程并发库学习笔记:带PDF下载
  所属分类: 其它
  开发工具:
  文件大小: 939kb
  下载次数: 0
  上传时间: 2019-04-06
  提 供 者: weixin_********
 详细说明:NULL 博文链接:https://itway.iteye.com/blog/1539359WwW.nasu, corn 多线程及java5的线程并发库 创建线程的两种传统方式 第一种方式:在 Thread子类覆盖的run方法中编写运行代码 Thread thread1 new Thread()f Override public void run()i While (true )t try t Thread. sleep(500); 3 catch (InterruptedException e)t e printstackTrace; System. out. printin (thread currentThread(. getName o); System. out. println(this getName ()); thread1 start( 第二种方式:在传递给 Thread对象的 Runnable对象的run方法中编写代码 Thread thread2 new Thread (new Runnable t Override public void run()i While(true try t Thread. sleep(2000)i catch (InterruptedException e )i e printstackTrace; System. out. println(Thread currentThread ().getName () thread2 start o; 总结:查看 Thread类的run(方法的源代码,可以看到其实这两种方式都是在调用 Thread 对象的run方法,如果 Thread类的run方法没有被覆盖,并且为该 Thread对象设置了一个 Runnable对象,该run方法会调用 Runnable对象的run方法。 问題:如果在 Thread子类覆盖的run方法中编写∫运行代码,也为 Thread」类对象传递」 一个 Runnable对象,那么,线程运行时的执行代码是子类的run方法的代码?还是 Runnable 对象的run方法的代码? 交流社区http://bbs.naxsu.com交流群:125035597 Www.nasu, corn 多线程及java5的线程并发库 new Thread (new Runnable()i public void runt System, out. println (" run method of runnable!"); public void run)i System. out. println("run method of thread! " ) fstart o; 输出结果是: run method of thread! 定时器的应用 package com. naxsu. thread; import java. util. Timer; import java. util. TimerTask *定时器 Timer:提供对计时器 MBean的实现。 Timertask:由 Timer安排为一次执行或重复执行的任务。 10880毫秒执行第一次,接着每1888毫秒执行一次 public class TimerTest i public static void main(String[] args)[ new Timer(.schedule(new TimerTaskoi Override public void runof System, out. println(thread. current Thread. getName o) },18989,1889); 线程的同步互斥与通信 不同线程同时对一份数据进行操作,就有可能出现线程安全问题 4交流社区:htt/ bbs. nasu. com交流群:125035597 Www.nasu, corn 多线程及java5的线程并发库 线程1 线程2 讲解 synchronized(obj的作用 主要是其中的。b的作用 b 1.a和b这两段代碼被两个线程执行时要互斥 宙需蒹的代码必须用 synchron1xc代n块包 3组置是 但c与 寸进入a和 线程3 线程4 中进行执行 4.用什么进行斥分 就是通过 synchronized obj)中的o的不同 而分为不同的互斥组 线程互斥: package com. nasu. thread; x传统线程互斥技术 synchronized解解线程互斥问题的前提是不同线程共亨同一个锁 public class Tradition ThreadSynchronized t public static void main(String[] args)i new Tradition ThreadSynchronizedo.inito; private void initoi final Outputer outputer new Outputero; new Thread (new Runnable(( Override public void run()i While (true)i try i Thread. sleep(10); 1 catch (InterruptedException e)t e printstackTrace o; outputer.output(www.naxsu.com") 3).start() 5交流社区;htp:/ bbs. nasu. com交流群:125035597 Www.nasu, corn 多线程及java5的线程并发库 new Thread ( new Runnable pride public void run ([ while (true)t try i Thread. sleep(10 3 catch (InterruptedException e)f e printstackTrace o; outputer. output( bbs. nasu. com"); tarto; class outputer i public void output (string name)i int len= namelength(; /使用 synchronized代码块解决线程安全问题,传入的参数是多线程调用的 同一个对象,上面两个细致入线程调用都是同一个 outputer对象(this) synchronized (this)[ for (int i =0; i< len; i++)i System. out. print (name charAt(1)); System. out. println() /使用 synchronized方法解决线程安全问题 public synchronized void output2(String name)t int len name length o; for (int i=0; i< len; i++)t System. out. print(name charAt(i)); System, out. printin(; //在使静态方法 outpu3(此时类要变为: static c1 ass outputer)和普通方法 output同步, synchronized( outputer. class) public static synchronized void output3(String name )i int len namelength o; for (int i =0; i< len; i++)t System. out. print(name charAt(i)); 6交流社区;htp:/ bbs. nasu. com交流群:125035597 Www.nasu, corn 多线程及java5的线程并发库 System. out. printIn(; 线程同步通讯 package com. nasu. thread 线程同步通讯 子线程循环18次,接着主线程循环188,接着又回到子线程循环18次,接着再回到主线 程又循坏188,如此循坏58次 public class TraditionalThread Communication i ic static void main(Stringl] args)[ final Businessbusiness new Business new Thread (new Runnable f Override public void runo i for (int i =l; i<=50; i++)i business. sub (i) 3).start(; for (int i 1; 1 <=50; i++)i business. main(i)j //要用到共同数据(包括同步锁)的若干方法应该归在同一个类身上 lass Business i private boolean bshouldsub true public synchronized void sub(int i)i while ( bShouldSub)i try /等待 this, wait(; I catch (InterruptedException e)f e, printstackTrace oj 交流社区http://bbs.naxsu.com交流群:125035597 Www.nasu, corn 多线程及java5的线程并发库 //子线程循环18次 for (int j j<=10;j++){ System. out. println( "sub thread sequence of +j+",loop of +1); bshouldsub false //唤醒 this notify ( public synchronized void main(int i)i While(bshouldSub)i this waito; catch (InterruptedException e)t e,printStackTrace(); //主线程循环188 for(intj=1;j<=189;j++){ System. out. println("main thread sequence of +j+",loop of +i); bShouldSub true; this notify o; 8交流社区;htp:/ obs. nasu. com交流群:125035597 Www.nasu, corn 多线程及java5的线程并发库 线程范围内共享数据 线程1绑定的数据 对象与模块A 对象与模块日 对象与模块C 理 变量或 变里或 变量或 达式 表达式 表达式 线程2 线程2绑定的数据 线程沱围内共享数据的示意图 package com. nasu. thread; import java.util. HashMap; mport java util. Map; import java. util. Random *线程范围内共享数据 public class ThreadScope ShareData t private static MapthreadData =new HashMap(; public static void main(String[] args)[ //模拟两个线程 for (int i=0; 1<2; 1++) new Thread(new Runnable(i Override public void run(i int data new Random().nextInt o; System. out. println(Thread currentThread ().getName() +"has put data " +data threadData. put(Thread. currentThreado, data) new A(.geto; new B(.geto; Fstart; 9交流社区;htp:/ bbs. nasu. com交流群:125035597 Www.nasu, corn 多线程及java5的线程并发库 static class Af public void get(f int data threadData get(Thread. currentThreado)i System. out. println("A from"+ Thread currentThread(. getNameo) get data data) static class Bi public void get(f int data= threadData get(Thread. current Thread) System. out. println( "B from"+ Thread currentThread(. getName( +get data: t data); Threadlocal实现线程范围的共享变量 每个线程调用全局 Threadloca对象的set方法,就相当于往其内部的map中增加一条 记录,key分别是各自的线程, value是各自的set方法传进去的值。在线程结束时可以调用 Threadlocal clear()方法,这样会更快释放内存,不调用也可以,因为线程结束后也可以自动 释放相关的 Threadloca|变量。 Threadloca|的应用场景 订单处理包含一系列操作:减少库存量、增加一条流水台账、修改总账,这几个操 作要在同一个事务中完成,通常也即同一个线程中进行处理,如果累加公司应收款 的操作失败了,则应该把前面的操作回滚,否则,提交所有操作,这要求这些操作 使用相同的数据库连接对象,而这些操作的代码分别位于不同的模块类中 银行转账包含一系列操作:把转出帐户的余额减少,把转入帐户的余额增加,这两 个操作要在同一个事务中完成,它们必须使用相冋的数据库连接对象,转入和转出 操作的代码分别是两个不同的帐户对象的方法。 例如 Strut2的 Action Context,同·段代码被不同的线程调用运行吋,该代码操作的 数据是每个线程各自的状态和数据,对于不同的线程来说, getContext方法拿到的 对象都不相同,对同一个线程来说,不管调用 getContext方法多少次和在哪个模块 中 getContext方法,拿到的都是同一个。 实现对 Threadlocal变量的封装,让外界不要直接操作 Threadlocal变量 对基本类型的数据的封装,这种应用相对很少见。 对对象类型的数据的封装,比较常见,即让某个类针对不同线程分别创建一个独立 的实例对象。 10交流社区:htt/ obs nasu. com交流群:125035597
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: