Java多线程和JDK1.5多线程新特性

线程:一行行代码往下执行。

Thread  的 run() ,如果没被覆盖,且为Thread设置了Runnable对象,则会调用Runnable的run();

 

线程互斥与同步通信

线程安全问题可以用银行转账来说明。

 

线程同步:必须把锁加在同一对象上,或同一类上,

方法上加synchronized ,同一个对象的Wait();等待   notify();唤醒任意一个

 

线程范围内的共享数据,例如:DB connection

connection.beginTransaction    connection.commit()

每个线程绑定一个connetion, 这样能保证事务的原子性。

 

 ThreadLocal<T>  相当于 Map<Thread.currentThread,T>

 

多个线程访问共享数据

1.如果每个线程执行的代码相同,可以放在同一Runnable中,Runnable中有共享数据。

2.共享数据放另一对象中,多个Runnable操作这些数据。

 

Java5的新特性

Java.util.concurrent

Java.util.concurrent.atomic 

线程池 :java.until.concurrent.Executors

固定大小线程池  缓存线程池  单一线程池  计时器线程池

 

Callable  &&  future

Callable采用ExecutorService.submit() 提交

CompletionService.take(); 哪个先完成先拿哪个。

 

Java.until.concurrent.locks

Lock类比传统线程模型中的synchronized方式更加面向对象。

两个线程执行的代码片段要实现同步互斥的效果,他们必须使用同一Lock对象。

锁是上在代表要操作的资源的类的内部方法中,而不是线程代码中。

 

读写锁:多个读锁不互斥,读锁与写锁互斥,多个写锁互斥,这是由jvm自己控制的。

ReadWriteLock

 

 Condition功能类似传统线程技术中的Object.wait()和Object.notify()的功能。

在等待Condition时,允许发生“虚假唤醒”,这通常作为对基础平台语义的让步。对于大多数应用程序,这带来的实际影响很小,因为Condition应该总是在一个循环中被等待,并测试正被等待的状态声明。

一个锁内部可以有多个Condition. 

Condition condition = new lock.newCondition();

Condition.await();

Condition.signal();

 

阻塞队列   起到缓冲的作用

 

Semaphore实现信号灯

可以维护当前访问自身的线程个数,并提供了同步机制。

单个信号量的semaphore可以实现同步互斥锁的功能。

 

CyclicBarrier

表示大家彼此等待,大家集合好后才开始出发,分散活动后又在指定的地点集合碰面。

 

CountDownLatch

犹如倒计时计数器。

可以实现一个人(也可多个人)等待其他人来通知他,可以实现一个人通知多个人的效果,类似裁判一声令下,运动员同时开始奔跑。

 

Exchanger

实现两个线程之间的数据交换,每个在完成一定的事务后想与对方交换数据,第一个先拿出数据的将一致等待到第二个带来数据时,才能彼此交换数据。 

 

阻塞队列

BlockingQueue<E>

Insert       add抛出异常      offer返回真假   put阻塞在那

Remove    remove            poll            take

Examine   element           peek

 

同步集合

ConcurrentHashMap

CopyOnWriteArrayList

CopyOnWriteArraySet

 

Spring借助threadlocal实现了dao jdbcTemplate ,service transaction的线程安全。

Springmvc 拦截到方法,实现了方法级别的线程安全,尽量不要在controller中定义全局变量,如果需要也是threadlocal级别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值