jdk5新技术学习笔记

上传人:wm****3 文档编号:43259028 上传时间:2018-06-05 格式:DOC 页数:5 大小:15.75KB
返回 下载 相关 举报
jdk5新技术学习笔记_第1页
第1页 / 共5页
jdk5新技术学习笔记_第2页
第2页 / 共5页
jdk5新技术学习笔记_第3页
第3页 / 共5页
jdk5新技术学习笔记_第4页
第4页 / 共5页
jdk5新技术学习笔记_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《jdk5新技术学习笔记》由会员分享,可在线阅读,更多相关《jdk5新技术学习笔记(5页珍藏版)》请在金锄头文库上搜索。

1、jdk5jdk5 新技术学习笔记新技术学习笔记1.定时器的应用:(Time 类和 TimerTask 类)new Timer().schedule(new TimeTask()Overridepublic void run()System.out.println(“炸弹爆炸“),10000,1000);(10 秒后爆炸,然后每隔 1 秒炸一次)复杂一点的可以用框架 quterz 来实现。2.普通方法上面的 synchronized 所对应的锁是本对象 this.而静态方法上 synchronized 所对应的锁是类的 class 对象3.wait 与 notify 实现线程间的通信:要用到共同

2、数据(包括同步锁)或共同算法的若干个方法应该归在同一个类身上,这种设计正好体现了内聚和程序的健壮性。锁是上在代表要操作的资源的类的内部方法中,而不是线程代码中。4.线程范围内的数据共享,为了线程相互之间不出现错乱,则会把线程和数据放到一个 map 中,这样就能保证每个线程之间的数据都是独立的。线程绑定。ThreadLocal 实现线程范围的共享变量(每个线程调用全局ThreadLocal 对象的 set 方法,就相当于往其内部的 map 中增加一条记录,key 分别是各自的线程,value 是各自的 set 方法传进去的值。在线程结束时可以调用 ThreadLocal.clear()方法, 这

3、样会更快释放内存,不调也可以,因为线程结束后也可以自动释放相关的ThreadLocal 变量)一个 ThreadLocal 代表一个变量。5.多个线程访问共享对象和数据的方式:如果每个线程执行的代码相同,可以使用同一个 Runnable 对象,这个 Runnable 对象中有那个共享数据,如,卖票系统就可以这么做如果每个线程执行的代码不同,这时候需要用不同的 Runnable对象,有如下两种方式来实现这些 Runnable 对象之间的数据共享:1.将共享数据封装在另外一个对象中,然后将这个对象逐一传递给各个 Runnable 对象。每个线程对共享数据的操作方法也分配到那个对象身上去完成,这样容

4、易实现针对该数据进行的各个操作的互斥和通信。2.将这些 Runnable 对象作为某一个类中的内部类,共享数据作为这个外部类中的成员变量,每个线程对共享数据的操作方法也分配给外部类,以便实现对共享数据进行的和个操作的互斥和通信,作为内部类的和个 Runnable 对象调用外部类的这些方法3.上面两种方式的结合:将共享数据封装在另外一个对象中,每个线程对共享数据的操作也分配到那个对象身上去完成,对象作为这个外部类中的成员变量或方法中的局部变量,每个线程的Runnable 对象作为外部类中的成员内部类或局部内部类4.总之,要同步互斥的几段代码最好是分别放在几个独立的方法中,这些方法再放在同一个类中

5、,这样比较容易实现它们之间的同步互斥和通信。_java5 中的线程并发库6.atomic 原子类,解决线程访问正数的问题线程池的概念与 Executors 类的应用(1.创建固定大小的线程池,2.创建缓存线程池,3.创建单一线程池)用线程池启动定时器:调用 ScheduleExecutorService 的 schedule 方法,返回的ScheduleFuture 对象可以取消任务。支持间隔重复任务的定时方式,不直接支持绝对定时方式,需要转换成相对时间方式。ExecutorService threadPool = Executors.newFixedThreadPool(3);/创建一个有

6、3 个线程的池,固定线程池threadPool.execute(new Runnable()public void run()System.out.println(Thread.currentThread.getName();ExecutorService threadPool = Executors.newCathedThreadPool();/缓存线程池,池里的线程是动态变化的,随着任务加入的多少而变化ExecutorService threadPool = Executors.newSingleThreadExecutor();/单独的一个线程,它会保证当池子里的线程死了之后再创建一个线

7、程关闭线程池:shutdown 是在所有任务完成后结束,shutdownNow 是立即结束Executors.newScheduledThreadPool(3).schedule(Runnable,delay,uint);/一个线程调试池*Lock如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁,总之,读的时候上读锁,写的时候上写锁Condition 的功能类似于在传统技术中的 Object wait 和 Object notify 的功能。在等待 Condition 时,允许发生“虚假唤醒” ,这通常作为对基础平义的让步。对于大多数应用程序,这带来的实际影响很小,因为 Co

8、ndition 应该总是在一个循环中被等待,并测试正被等待的状态声明。某个实现可以随意移除可能的虚假唤醒,但建议应用程序员总是假定这些虚假唤醒可能发生,因此总是在一个循环中等待。Condition condition=lock.newCondition();condition.await();condition.signal();#Semaphore 实现信号灯,可以维护当前访问自身的线程个数,并提供了同步机制。使用 Semaphore 可以控制同时访问资源的线程个数。单个信号量的 Semaphore 对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁” ,再由另一个线程释放“锁”,这可

9、应用于死锁恢复的一些场合*其他同步工具类*CyclicBarrier:循环等待 表示大家彼此等待,大家集合好后才开始出发,分散活动后又在指定地点集合碰面。CountDownLatch 犹如倒计时器,调用 CountDownLatch 对象的countDown 方法就将计数器减 1,当计数到达 0 时,则所有等待者或单个等待者开始执行。可以实现一个人(也可以是多个人)等待其他所有人都来通知他,可以实现一个人通知多个人的效果,类似裁判一声口令,运动员同时开始奔跑,或者所有运动员都跑到终点后裁判才可以公布结果,用这个功能做百米赛跑的游戏程序不错,还可以实现一个计划需要多个领导都签字后才能继续向下实施

10、的情况。Exchanger 用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。*java 并发库下的集合*可阻塞的队列:队列包含固定长度的队列和不固定长度的队列。ArrayBlockingQueue 只有 put 方法和 take 方法才具有阻塞功能阻塞队列与 Semaphore 有些相似,但也不同,阻塞队列是一方存放数据,另一方释放数据,Semaphore 通常则是由同一方设置和释放信号量同步集合:java5 中提供了如下一些同步集合类:1.通过java.util.concurrent 包下的介绍可以知道哪些并发集合ConcurrentHashMap,CopyOnWriteArrayList,CopyOnWriteArraySet

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号