java高级线程之简单类概要

这个大家可以了解下,如果有需要测试代码的,可以下吗留言

创建线程的两种传统方式
1、在Thread子类覆盖的run方法中编写运行代码
   涉及一个以往知识点:能否在run方法声明上抛出InterruptedException异常,以便省略run方法内部对Thread.sleep()语句的try...catch处理?
2、在传递给Thread对象的Runnable对象的run方法中编写代码
总结:查看Thread对象的run()方法的源代码,可以看到其实这两种方式都是在调用Thread对象的run方法,如果Thread类的run方法没有被覆盖,并且为该Thread对象设置了一个Runnable对象,该run方法会调用Runnable对象的run方法


callable and future
Future取得的结果类型和Callable返回的结果类型必须一致,这是通过泛型来实现的。
Callable要采用ExecutorSevice的submit方法提交,返回的future对象可以取消任务。

Lock&Condition实现线程同步通信
Lock比传统线程模型的synchronized方式更加面向对象,与生活中的所类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。锁是上在代表要操作的资源的类的内部方法中
而不是线程代码中!
读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。

Semaphore实现信号灯
Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数
,例如实现一个文件运行的并发访问数。

CyclicBarrier
表示大家彼此等待,大家集合好后才开始出发,分散活动后又在指定地点集合碰面。
CountDownLatch
犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计数器到达0时,则所有
等待者或单个等待者开始执行。

Exchanger:用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人讲一直等待
第二个人拿着数据到来时,才能彼此交换数据。

可阻塞的队列
队列包含固定长度的队列和不固定长度的队列
ArrayBlockingQueue
只有put方法和take方法才具有阻塞功能

猜你喜欢

转载自blog.csdn.net/youjiangtengwan1/article/details/83583567