黑马程序员12--线程并发库

来源:互联网 发布:linux arp 刷新时间 编辑:程序博客网 时间:2024/05/23 15:48

---------------------- android培训、java培训、期待与您交流! ----------------------

传统线程机制的回顾
创建线程的两种方式
继承:
Thread thread = new Thread(){
 run(){ 


 }
};
构造函数实现接口:
Thread thread =new Thread(new Runnable(){
 run(){ 

 }
});
Timer定时器的应用
newTimer().schedule(new Runnable(){
 run(){
 }
 },
 时间,
 时间单位,
);
小知识点:
外面类的静态方法中,不能创建内部类的对象。
因为内部类访问外部类的属性用(外部类.this.属性),可以访问。
而外部类没有实例化,就没有属性,当访问时就报错。
线程之间互斥与同步通信
经验:
要用到共同数据(包括同步锁)的若干个方法,应该归在同一个类身上,这种设计体现了高内聚,和程序的健壮性。
在线程通信时
互斥的问题是写在线程访问资源上,而不是写在线程上。

ThreadLocal线程范围内的共享数据
一个ThreadLocal只能放一个共享数据,而多个数据要创建多个ThreadLocal,也可以把多个数据封装成对象。
还有一中用饿汉式单例模式来封装ThreadLocal
多个线程访问共享数据有那些方式
1.把共享数据封装在另一个对象中,然后将这个对象逐个传递给各个Runnable,这样容易实现对数据的互斥与通信
2.将Runnable作为某一个类中的内部类,共享数据作为这个外部类的成员变量。
java5的线程并发库
AtomicInteger用于多个线程访问共享数据
ThreadPool线程池
分为SingleThreadPool,CachedThreadPool,指定数量的线程池
线程池定时器
Lock与condition实现线程同步通信
具有读锁写锁,多个读锁不互斥,读锁和写锁互斥,写锁和写锁互斥。
同步集合
concurrentHashmap
concurrentSkipListMap
concurrentSkipListSet
copyonWriteArrayList 
copyonWriteArrayList 
同步队列
synchronousQueue
BlockingQueue
LinkedBlockingQueue
ArrayBlockingQueue

 

 

 

---------------------- android培训、java培训、期待与您交流! ----------------------

原创粉丝点击