移动端并发编程基础篇
来源:互联网 发布:大学生防网络诈骗 编辑:程序博客网 时间:2024/06/03 19:51
1.ThreadLocal 解决多个线程访问一个对象
ThreadLocal<Object> tl= new ThreadLocal<Object>();
tl.set(object); //object绑定到本地线程
tl.get(); //获取该线程下的对象变量
tl.remove(); //移除操作
ThreadLocal实现机制:
Map<ThreadName,Object> mMap = HashMap<String,Object>() // HashMap自己内部实现的
set(Object){
String tName = Thread.getCurrentThread().getName();
mMap.put(tName,object);
}
.....其他操作以此类推
2. volatile 目的多个线程访问中维持一个变量,不准许每个线程持有自己的变量。用来修饰变量
3.synchronized 同步锁,阻塞式。修饰方法,代码块
1) 修饰在非静态方法前,叫做对象锁
class A{
public synchronized void a(){
Thread.sleep(5*1000);
}
public synchronized void b(){
Thread.sleep(5*1000);
}
}
A a = new A();
Thread tA = new Thead(){
run(){
a.a();
}
}
Thread tB = new Thead(){
run(){
a.b();
}
}
tA.start();
tB.start();
}
上述是对象锁代码,tB会被阻塞住需要tA完全执行完毕,tB才能得到执行
2) 修饰在静态方法前,叫做类锁
class A{
public static synchronized void a(){
Thread.sleep(5*1000);
}
public static synchronized void b(){
Thread.sleep(5*1000);
}
}
Thread tA = new Thead(){
run(){
A.a();
}
}
Thread tB = new Thead(){
run(){
A.b();
}
}
tA.start();
tB.start();
上述是类锁代码实例,tB会被阻塞住需要tA完全执行完毕,tB才能得到执行
对象锁和类锁之间相互之间不受影响
4.Atomic 原子操作类,通过算法实现非阻塞式解决高并发多线程访问同一变量的问题。使用场景,序列号生成。性能和效率优秀于阻塞式
AtomicInteger aInt = new AtomicInteger(defaultVal);
int r = aInt.getAndIncrement();
- 移动端并发编程基础篇
- 移动端并发编程基础篇-锁介绍
- 移动端并发编程基础篇-阻塞队列ArrayBlockingQueue&LinkedBlockingQueue
- 并发编程之基础问答篇
- Java并发编程基础
- Java并发编程基础
- golang 并发编程基础
- Java并发编程基础
- 并发编程基础
- Java 并发编程 基础
- 并发编程基础知识点
- Java并发编程基础
- Java并发编程基础
- 并发编程基础
- Java并发编程基础
- Java并发编程基础
- Java并发编程基础
- Java并发编程:并发基础概念
- blob大文件切片及上传
- 29. Divide Two Integers
- k、M、G、T 硬盘单位-简单说
- Kettle数据流中空字符串和NULL值
- Ant之build.xml配置详解
- 移动端并发编程基础篇
- thinkphp 微信授权登录 以及微信实现分享
- 编程之路小细节-数组和集合作为参数的查询
- linux 文件操作:
- 数据库视图作用?什么时候用视图?
- Java面向对象、抽象、封装、继承、多态
- 不一样的随机数生成方法(C/C++)
- OC
- Error in invoking target 'client_sharedlib' of makefile '/crm/bip/Oracle_BI1/rdbms/lib/ins_rdbms.mk'