JAVA/Android 笔记 Atomic / ExcuterService

Atomic

普通情况需要线程安全我们会选择用synchronized。

但是这样有时候会因为程序错误造成死锁,或者根本就没有用对地方导致根本就没有同步。所以使用synchronized的时候需要仔细的测试。

JAVA 1.5以后提供了一个新的包 java.util.concurrent,里面有很多为线程并行程序提供支持的类。
而这个包下面还有一个包:java.util.concurrent.atomic,其中就有这么一系列Atimic类

例如,最简单的AtomicInteger,这个类像包装类Integer一样,可以包装出一个整型变量。然后用这个类下面的一些方法来操作,get(), getAndAdd(int delta),等等。一看就知道是干什么用的,就算不知道,查一查api文档也知道了。

那么为什么要这么包装呢?因为“An int value that may be updated atomically”。这个atomically的意思就是说,可以线程安全。

如果不同的线程对同一个Atomic对象操作,那么每次只有一个线程能操作。保证线程安全。

与synchronized的区别最明显的就是,使用方便。
其次,我在网上查找到的描述来看,这个Atomic的操作实际上是通过native来实现,启用了CPU的硬件级别的同步功能。所以效率更高。

那么,在合适的情况下,应该多使用Atomic类。

参考

ExcuterService

Handler是Android里面使用频率非常高的一个类,不管是各种组件里面的使用,还是直接使用都非常有效。但是这个是Android增加的,并不是JAVA里面的。

实际上,1.5版本的java.util.concurrent包还有这么一个ExcuterService接口,以及一些提供支持的类,提供了类似的操作。

ScheduledExcuterService service = Excuters.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit);

第一行创建这么一个对象,第二行就像timer一样操作。
ScheduledExcuterService是使用的线程池来实现,所以效率更好,不需要专门的维护。

java.util.concurrent

这个包下面的更多的工具还需要进一步探索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值